| | |
| | | ;模块ID=DeviceConcreteType的值 / 设备的官方名字 / 设备默认备注名字 / DeviceBeloneType的值 /设备所属种类的名字 / 设备类型名字
|
| | |
|
| | | ;智能门锁(H06C)〆
|
| | | H06C = 2800 / S-one 智能门锁 / H06C 智能门锁 / 2800 / 门锁 / 智能门锁
|
| | | H06C = 2800 / H06C 智能门锁 / H06C 智能门锁 / 2800 / 门锁 / 智能门锁
|
| | | ;智能门锁(S-one)〆
|
| | | S-one = 2802 / H06C 智能门锁 / S-one 智能门锁 / 2800 / 门锁 / 智能门锁
|
| | | S-one = 2802 / S-one 智能门锁 / S-one 智能门锁 / 2800 / 门锁 / 智能门锁
|
| | |
|
| | | ;***************************************************************
|
| | | ; 空调设备
|
| | |
| | | 16164=过户成功 |
| | | 16165=过户失败 |
| | | 16166=恭喜{0}成为「{1}」管理员 |
| | | 16167=检测到还没有备份,请先备份 |
| | | |
| | | ;★★★★下面这些是接口的返回信息翻译,从18000开始★★★★
|
| | | 18004=指定网关已经被绑定
|
| | |
| | | /// <summary> |
| | | /// 版本号 |
| | | /// </summary> |
| | | public static string CodeIDString = "1.1.0120092101"; |
| | | public static string CodeIDString = "1.1.0120092301"; |
| | | /// <summary> |
| | | /// 注册来源(0:HDL On 1:Zigbee) |
| | | /// </summary> |
| | |
| | |
|
| | | #endregion |
| | |
|
| | | #region ■ 显示弹窗输入界面___________________
|
| | |
|
| | | /// <summary>
|
| | | /// <para>显示一个Dialog的弹窗输入界面,它不会自动关闭,需要手动关闭</para>
|
| | | /// <para>.CloseDialog()为关闭弹窗</para>
|
| | | /// <para>如果输入框的内容为空,并且设置有【i_TipText】,则不会调用回调函数,并且提示【i_TipText】的内容</para>
|
| | | /// </summary>
|
| | | /// <param name="i_TitleText">弹窗的标题信息</param>
|
| | | /// <param name="i_InputText">输入框初始化值(忽略请设置为null)</param>
|
| | | /// <param name="i_TipText">输入框灰色字体说明(忽略请设置为null)</param>
|
| | | /// <param name="i_ComfirmClickEvent">确认按钮事件</param>
|
| | | /// <returns></returns>
|
| | | public void ShowDialogInputForm(string i_TitleText, string i_InputText, string i_TipText, Action<DialogInputControl, string> i_ComfirmClickEvent)
|
| | | {
|
| | | //生成一个弹窗画面
|
| | | var dialogForm = new DialogInputControl();
|
| | | //标题
|
| | | dialogForm.SetTitleText(i_TitleText);
|
| | | //输入框灰色字体说明
|
| | | if (i_TipText != null)
|
| | | {
|
| | | dialogForm.SetTipText(i_TipText);
|
| | | }
|
| | | //输入框初始值
|
| | | if (i_InputText != null)
|
| | | {
|
| | | dialogForm.Text = i_InputText;
|
| | | }
|
| | |
|
| | | //按下确认按钮
|
| | | dialogForm.ComfirmClickEvent += ((textValue) =>
|
| | | {
|
| | | i_ComfirmClickEvent?.Invoke(dialogForm, textValue);
|
| | | });
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 显示没有数据的图像显示特效_________ |
| | |
|
| | | /// <summary>
|
| | |
| | | public class FirmwareVersionInfo
|
| | | {
|
| | | /// <summary>
|
| | | /// 云端上面的那个名字
|
| | | /// 云端上面的那个名字,如果是本地空调的模块时,它为全路径
|
| | | /// </summary>
|
| | | public string Name = string.Empty;
|
| | | /// <summary>
|
| | |
| | | /// </summary>
|
| | | public string HardwareVersion = string.Empty;
|
| | | /// <summary>
|
| | | /// 镜像类型
|
| | | /// 镜像类型(当等于-100时,代表它是空调的本地模块)
|
| | | /// </summary>
|
| | | public string ImagType = string.Empty;
|
| | | /// <summary>
|
| | |
| | | await System.Threading.Tasks.Task.Delay(1000);
|
| | |
|
| | | //下载固件资源
|
| | | var pra = new { RequestVersion = Common.CommonPage.RequestVersion, DistributedMark = this.deviceFirmware.DistributedMark };
|
| | | this.deviceFirmwareByte = Common.CommonPage.Instance.RequestHttpsZigbeeBytesResultAsync("FirmwareMana/DownloadPlatformUploadFirmware", Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(pra)));
|
| | | if (this.deviceFirmware.ImagType != "-100")
|
| | | {
|
| | | var pra = new { RequestVersion = Common.CommonPage.RequestVersion, DistributedMark = this.deviceFirmware.DistributedMark };
|
| | | this.deviceFirmwareByte = Common.CommonPage.Instance.RequestHttpsZigbeeBytesResultAsync("FirmwareMana/DownloadPlatformUploadFirmware", Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(pra)));
|
| | | }
|
| | | else
|
| | | {
|
| | | //取本地模板
|
| | | this.deviceFirmwareByte = HdlFileLogic.Current.ReadFileByteContent(this.deviceFirmware.Name);
|
| | | }
|
| | | if (this.deviceFirmwareByte == null)
|
| | | {
|
| | | //设备固件资源下载失败
|
| | |
| | |
|
| | | //获取需要下载的固件数据
|
| | | var listVersion = GetNeedToDownLoadVersionData(listTempDevice, listTempGateway);
|
| | | if (listVersion.Count == 0)
|
| | | //获取需要下载的空调模块
|
| | | var listAcOta = new List<OTADevice>();
|
| | | var listAcUpdate = GetNeedDownLoadAirConditionerModule(listTempDevice, ref listAcOta);
|
| | |
|
| | | if (listVersion.Count == 0 && listAcUpdate.Count == 0)
|
| | | {
|
| | | return 0;
|
| | | }
|
| | |
| | | //固件存储路径
|
| | | string firmwareDir = DirNameResourse.FirmwareUpdateDirectory;
|
| | | int nowCount = 0;
|
| | | int macCount = listVersion.Count + listAcUpdate.Count;
|
| | |
|
| | | foreach (var versionData in listVersion)
|
| | | {
|
| | | nowCount++;
|
| | |
| | | if (result == -1)
|
| | | {
|
| | | ProgressFormBar.Current.Close();
|
| | | //保存列表名字
|
| | | HdlFileLogic.Current.SaveFileContent(DirNameResourse.FirmwareUpdateList, dicFirmwareName);
|
| | | return -1;
|
| | | }
|
| | | //获取当前这个版本的固件信息
|
| | |
| | | if (versionFirmware == null)
|
| | | {
|
| | | //云端没有这个版本 进度值
|
| | | ProgressFormBar.Current.SetValue(nowCount, listVersion.Count);
|
| | | ProgressFormBar.Current.SetValue(nowCount, macCount);
|
| | | continue;
|
| | | }
|
| | | //去下载这个固件
|
| | | var pra = new { RequestVersion = Common.CommonPage.RequestVersion, DistributedMark = versionFirmware.DistributedMark };
|
| | | var byteData = UserCenterLogic.GetByteResponseDataByRequestHttps("FirmwareMana/DownloadPlatformUploadFirmware", false, pra, null, true);
|
| | | var byteData = UserCenterLogic.GetByteResponseDataByRequestHttps("FirmwareMana/DownloadPlatformUploadFirmware", false, pra, new List<string> { "NotCheck" }, true);
|
| | | if (byteData == null)
|
| | | {
|
| | | ProgressFormBar.Current.Close();
|
| | | //保存列表名字
|
| | | HdlFileLogic.Current.SaveFileContent(DirNameResourse.FirmwareUpdateList, dicFirmwareName);
|
| | | return -1;
|
| | | }
|
| | | //保存固件
|
| | |
| | | dicFirmwareName[saveFile] = versionFirmware.Name;
|
| | |
|
| | | //进度值
|
| | | ProgressFormBar.Current.SetValue(nowCount, listVersion.Count);
|
| | | ProgressFormBar.Current.SetValue(nowCount, macCount);
|
| | | }
|
| | | for (int i = 0; i < listAcUpdate.Count; i++)
|
| | | {
|
| | | //下载空调模块
|
| | | var pra = new { RequestVersion = Common.CommonPage.RequestVersion, DistributedMark = listAcUpdate[i].DistributedMark };
|
| | | var deviceFirmwareByte = UserCenterLogic.GetByteResponseDataByRequestHttps("FirmwareMana/DownloadPlatformUploadFirmware", false, pra, new List<string> { "NotCheck" }, true);
|
| | | if (deviceFirmwareByte == null)
|
| | | {
|
| | | ProgressFormBar.Current.Close();
|
| | | //保存列表名字
|
| | | HdlFileLogic.Current.SaveFileContent(DirNameResourse.FirmwareUpdateList, dicFirmwareName);
|
| | | return -1;
|
| | | }
|
| | | //保存固件
|
| | | string fileName = "AC_" + listAcOta[i].HwVersion + "_" + listAcOta[i].ImgTypeId + "_" + listAcUpdate[i].Name;
|
| | | var saveFile = System.IO.Path.Combine(firmwareDir, fileName);
|
| | | HdlFileLogic.Current.SaveByteToFile(saveFile, deviceFirmwareByte);
|
| | |
|
| | | //进度值
|
| | | ProgressFormBar.Current.SetValue(nowCount, macCount);
|
| | | }
|
| | |
|
| | | //保存列表名字
|
| | | HdlFileLogic.Current.SaveFileContent(DirNameResourse.FirmwareUpdateList, dicFirmwareName);
|
| | | ProgressFormBar.Current.Close();
|
| | |
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 获取需要下载的空调模块
|
| | | /// </summary>
|
| | | /// <param name="listDevice">设备列表</param>
|
| | | /// <param name="listTaget">与返回值对应的东西</param>
|
| | | private static List<FirmwareVersionInfo> GetNeedDownLoadAirConditionerModule(List<OTADevice> listDevice, ref List<OTADevice> listTaget)
|
| | | {
|
| | | var listUpdate = new List<FirmwareVersionInfo>();
|
| | | //固件存储路径
|
| | | string firmwareDir = DirNameResourse.FirmwareUpdateDirectory;
|
| | |
|
| | | foreach (var otaDevice in listDevice)
|
| | | {
|
| | | var myType = Common.LocalDevice.Current.GetMyDeviceEnumInfo(new List<CommonDevice> { otaDevice });
|
| | | if (myType.ConcreteType != Common.DeviceConcreteType.AirConditioner_ZbGateway)
|
| | | {
|
| | | //只处理中央空调
|
| | | continue;
|
| | | }
|
| | | var list = GetFirmwareVersionListInfo(FirmwareLevelType.A设备, otaDevice.HwVersion.ToString(), otaDevice.ImgTypeId.ToString());
|
| | | foreach (var data in list)
|
| | | {
|
| | | if (data.Name.EndsWith(".bin") == true && System.IO.File.Exists(firmwareDir) == false)
|
| | | {
|
| | | //只要.bin文件
|
| | | listUpdate.Add(data);
|
| | | listTaget.Add(otaDevice);
|
| | | }
|
| | | }
|
| | | }
|
| | | return listUpdate;
|
| | | }
|
| | |
|
| | | /// <summary>
|
| | | /// 模板设备的版本信息
|
| | | /// </summary>
|
| | | private class TemplateDeviceVersion
|
| | |
| | | /// </summary>
|
| | | private void InitAirConditioningModuleList(VerticalListControl listView)
|
| | | {
|
| | | var list = HdlFirmwareUpdateLogic.GetFirmwareVersionListInfo(FirmwareLevelType.A设备, otaDevice.HwVersion.ToString(), otaDevice.ImgTypeId.ToString());
|
| | | var listUpdate = new List<FirmwareVersionInfo>();
|
| | | foreach (var data in list)
|
| | | {
|
| | | if (data.Name.EndsWith(".bin") == true)
|
| | | {
|
| | | //只要.bin文件
|
| | | listUpdate.Add(data);
|
| | | }
|
| | | }
|
| | | var listUpdate = this.GetAirConditioningModuleData();
|
| | | if (listUpdate.Count == 0)
|
| | | {
|
| | | //没有可升级的空调模块
|
| | |
| | | /// <param name="listView"></param>
|
| | | /// <param name="info"></param>
|
| | | /// <param name="mainkeys"></param>
|
| | | private void AddModuleRow(VerticalListControl listView, FirmwareVersionInfo info, string mainkeys,bool addLine)
|
| | | private void AddModuleRow(VerticalListControl listView, FirmwareVersionInfo info, string mainkeys, bool addLine)
|
| | | {
|
| | | //获取空调模块的名字
|
| | | string textView = this.GetAirConditioningModuleName(info);
|
| | |
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 获取空调模块数据___________________
|
| | |
|
| | | /// <summary>
|
| | | /// 获取空调模块数据
|
| | | /// </summary>
|
| | | /// <returns></returns>
|
| | | private List<FirmwareVersionInfo> GetAirConditioningModuleData()
|
| | | {
|
| | | var listUpdate = new List<FirmwareVersionInfo>();
|
| | |
|
| | | var list = HdlFirmwareUpdateLogic.GetFirmwareVersionListInfo(FirmwareLevelType.A设备, otaDevice.HwVersion.ToString(), otaDevice.ImgTypeId.ToString());
|
| | | foreach (var data in list)
|
| | | {
|
| | | if (data.Name.EndsWith(".bin") == true)
|
| | | {
|
| | | //只要.bin文件
|
| | | listUpdate.Add(data);
|
| | | }
|
| | | }
|
| | | if (Common.Config.Instance.Home.TemplateMode == 2 && listUpdate.Count == 0)
|
| | | {
|
| | | //从本地获取
|
| | | var listFile = HdlFileLogic.Current.GetFileFromDirectory(DirNameResourse.FirmwareUpdateDirectory);
|
| | | string otaKey = otaDevice.HwVersion.ToString() + "_" + otaDevice.ImgTypeId.ToString();
|
| | | foreach (var file in listFile)
|
| | | {
|
| | | if (file.StartsWith("AC_" + otaKey) == true && file.EndsWith(".bin") == true)
|
| | | {
|
| | | var info = new FirmwareVersionInfo();
|
| | | info.Name = System.IO.Path.Combine(DirNameResourse.FirmwareUpdateDirectory, file);
|
| | | info.ImagType = "-100";
|
| | | listUpdate.Add(info);
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | return listUpdate;
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 一般方法___________________________
|
| | |
|
| | | /// <summary>
|
| | |
| | | using System;
|
| | | using System.Collections.Generic;
|
| | | using System.IO; |
| | | using System.IO;
|
| | | using System.Text;
|
| | |
|
| | | namespace Shared.Phone.UserCenter.HideOption
|
| | |
| | | {
|
| | | var form = new HideOptionSearchAllFile();
|
| | | form.AddForm(Common.Config.Instance.FullPath);
|
| | | }; |
| | | |
| | | };
|
| | |
|
| | | #if iOS
|
| | | //查看全部文件 |
| | | //查看全部文件
|
| | | var row0 = new FrameRowControl(listView.rowSpace / 2);
|
| | | listView.AddChidren(row0);
|
| | | row0.AddLeftCaption("IOS图片", 800);
|
| | |
| | | row0.ButtonClickEvent += (sender, e) =>
|
| | | {
|
| | | string fileName = "Item/Add.png";
|
| | | if (File.Exists(Path.Combine(Application.RootPath, fileName))) |
| | | { |
| | | var form = new HideOptionSearchAllFile(); |
| | | form.AddForm(Application.RootPath); |
| | | return; |
| | | } |
| | | |
| | | string dirPath = string.Empty; |
| | | if (Application.Skin != null) |
| | | { |
| | | dirPath = Application.Skin + "/" + fileName; |
| | | if (File.Exists(Path.Combine(Application.RootPath, dirPath))) |
| | | { |
| | | var form = new HideOptionSearchAllFile(); |
| | | form.AddForm(Path.Combine(Application.RootPath, Application.Skin + "/")); |
| | | return; |
| | | } |
| | | string text2 = Foundation.NSBundle.MainBundle.PathForResource(dirPath, null); |
| | | if (text2 != null) |
| | | { |
| | | var form = new HideOptionSearchAllFile(); |
| | | form.AddForm(text2.Replace(dirPath, string.Empty)); |
| | | return; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | dirPath = "Phone/" + fileName; |
| | | if (File.Exists(Path.Combine(Application.RootPath, dirPath))) |
| | | { |
| | | var form = new HideOptionSearchAllFile(); |
| | | form.AddForm(Path.Combine(Application.RootPath, "Phone/")); |
| | | return; |
| | | } |
| | | string text2 = Foundation.NSBundle.MainBundle.PathForResource(dirPath, null); |
| | | if (text2 != null) |
| | | { |
| | | var form = new HideOptionSearchAllFile(); |
| | | form.AddForm(text2.Replace(dirPath, string.Empty)); |
| | | return; |
| | | } |
| | | if (File.Exists(Path.Combine(Application.RootPath, fileName)))
|
| | | {
|
| | | var form = new HideOptionSearchAllFile();
|
| | | form.AddForm(Application.RootPath);
|
| | | return;
|
| | | }
|
| | |
|
| | | string dirPath = string.Empty;
|
| | | if (Application.Skin != null)
|
| | | {
|
| | | dirPath = Application.Skin + "/" + fileName;
|
| | | if (File.Exists(Path.Combine(Application.RootPath, dirPath)))
|
| | | {
|
| | | var form = new HideOptionSearchAllFile();
|
| | | form.AddForm(Path.Combine(Application.RootPath, Application.Skin + "/"));
|
| | | return;
|
| | | }
|
| | | string text2 = Foundation.NSBundle.MainBundle.PathForResource(dirPath, null);
|
| | | if (text2 != null)
|
| | | {
|
| | | var form = new HideOptionSearchAllFile();
|
| | | form.AddForm(text2.Replace(dirPath, string.Empty));
|
| | | return;
|
| | | }
|
| | | }
|
| | | else
|
| | | {
|
| | | dirPath = "Phone/" + fileName;
|
| | | if (File.Exists(Path.Combine(Application.RootPath, dirPath)))
|
| | | {
|
| | | var form = new HideOptionSearchAllFile();
|
| | | form.AddForm(Path.Combine(Application.RootPath, "Phone/"));
|
| | | return;
|
| | | }
|
| | | string text2 = Foundation.NSBundle.MainBundle.PathForResource(dirPath, null);
|
| | | if (text2 != null)
|
| | | {
|
| | | var form = new HideOptionSearchAllFile();
|
| | | form.AddForm(text2.Replace(dirPath, string.Empty));
|
| | | return;
|
| | | }
|
| | | }
|
| | | };
|
| | | #endif
|
| | |
| | | nextDir += Arry[i] + "/";
|
| | | }
|
| | | //初始化中部信息
|
| | | this.InitMiddleFrame(nextDir.Trim('/'));
|
| | | this.InitMiddleFrame(nextDir);
|
| | | };
|
| | | }
|
| | |
|
| | |
| | | //}
|
| | | //else
|
| | | {
|
| | | try |
| | | { |
| | | var files = System.IO.Directory.GetDirectories(directory); |
| | | foreach (var file in files) |
| | | { |
| | | string[] arry = file.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries); |
| | | listDirectory.Add(arry[arry.Length - 1]); |
| | | } |
| | | listDirectory.Sort(); |
| | | |
| | | listAllFile = HdlFileLogic.Current.GetFileFromDirectory(directory.TrimEnd('/')); |
| | | listAllFile.Sort(); |
| | | var files = System.IO.Directory.GetDirectories(directory);
|
| | | foreach (var file in files)
|
| | | {
|
| | | string[] arry = file.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
|
| | | listDirectory.Add(arry[arry.Length - 1]);
|
| | | }
|
| | | catch
|
| | | { |
| | | this.ShowMassage(ShowMsgType.Tip, "读取文件夹内容失败"); |
| | | }
|
| | | listDirectory.Sort();
|
| | |
|
| | | listAllFile = HdlFileLogic.Current.GetFileFromDirectory(directory.TrimEnd('/'));
|
| | | listAllFile.Sort();
|
| | | }
|
| | |
|
| | | var listView = new VerticalListControl(23);
|
| | |
| | | btnTransfer.TextID = R.MyInternationalizationString.uTransfer;
|
| | | btnTransfer.ButtonClickEvent += (sender, e) =>
|
| | | {
|
| | | rowLayout.HideMenu();
|
| | | HdlCheckLogic.Current.CheckSecondarySecurity(() =>
|
| | | {
|
| | | //验证成功
|
| | | var form = new Transfer.TransferResidenceMainForm();
|
| | | form.AddForm(1);
|
| | | //执行过户操作
|
| | | this.DoTransferResidence();
|
| | | },
|
| | | () =>
|
| | | {
|
| | |
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 过户_______________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 执行过户操作
|
| | | /// </summary>
|
| | | private void DoTransferResidence()
|
| | | {
|
| | | this.ShowProgressBar();
|
| | | HdlThreadLogic.Current.RunThread(() =>
|
| | | {
|
| | | //检测它有没有备份
|
| | | var listBack = HdlBackupLogic.Current.GetBackupListNameFromDB();
|
| | | this.CloseProgressBar();
|
| | |
|
| | | if (listBack == null)
|
| | | {
|
| | | return;
|
| | | }
|
| | | HdlThreadLogic.Current.RunMain(() =>
|
| | | {
|
| | | if (listBack.Count > 0)
|
| | | {
|
| | | var form = new Transfer.TransferResidenceMainForm();
|
| | | form.AddForm(1);
|
| | | }
|
| | | else
|
| | | {
|
| | | //检测到还没有备份,请先备份
|
| | | this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.uIsNotHadBackupByCheckPleaseBackup));
|
| | |
|
| | | //生成一个弹窗画面
|
| | | this.ShowDialogInputForm(Language.StringByID(R.MyInternationalizationString.uAddBackup),
|
| | | Config.Instance.Home.Name,
|
| | | Language.StringByID(R.MyInternationalizationString.uPleaseInpuBackupName), (dialogForm, textValue) =>
|
| | | {
|
| | | //画面关闭
|
| | | dialogForm.CloseDialog();
|
| | |
|
| | | HdlThreadLogic.Current.RunThread(() =>
|
| | | {
|
| | | //创建一个备份名字
|
| | | string backupClassId = HdlBackupLogic.Current.CreatNewBackupNameToDB(textValue);
|
| | | if (backupClassId == null)
|
| | | {
|
| | | //创建备份名字失败
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uCreatBackupNameFail);
|
| | | this.ShowMassage(ShowMsgType.Error, msg);
|
| | |
|
| | | return;
|
| | | }
|
| | |
|
| | | //上传数据到云端
|
| | | bool result = HdlBackupLogic.Current.UpLoadBackupFileToDB(backupClassId);
|
| | | if (result == false)
|
| | | {
|
| | | //文件上传失败
|
| | | string msg = Language.StringByID(R.MyInternationalizationString.uFileUpLoadFail);
|
| | | this.ShowMassage(ShowMsgType.Error, msg);
|
| | |
|
| | | //如果上传失败的话,就把它删除
|
| | | HdlBackupLogic.Current.DeleteDbBackupData(backupClassId);
|
| | |
|
| | | return;
|
| | | }
|
| | |
|
| | | HdlThreadLogic.Current.RunMain(() =>
|
| | | {
|
| | | var form = new Transfer.TransferResidenceMainForm();
|
| | | form.AddForm(1);
|
| | | });
|
| | | });
|
| | | });
|
| | | }
|
| | | });
|
| | | });
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
|
| | | #region ■ 一般方法___________________________
|
| | |
|
| | | /// <summary>
|
| | |
| | | /// <summary> |
| | | /// 恭喜XXXXX成为「NNNNN」管理员 |
| | | /// </summary> |
| | | public const int uCongratulationsXXBecomingNNAdministrator = 16166; |
| | | public const int uCongratulationsXXBecomingNNAdministrator = 16166;
|
| | | /// <summary>
|
| | | /// 检测到还没有备份,请先备份
|
| | | /// </summary>
|
| | | public const int uIsNotHadBackupByCheckPleaseBackup = 16167;
|
| | |
|
| | |
|
| | | //★★★★下面这些是接口的返回信息翻译,从18000开始★★★★
|