English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

نظام إدارة الموقع ASP.NET MVC5 + EF6 + EasyUI، تطوير منصة WeChat Public Platform: إدارة الرسائل

مقدمة 

في هذا الدرس، نلقي نظرة على طلبات وردود الرسائل التي نعرفها، ونتعرف على بناء الجداول في هذا الدرس، وتصميم الجداول معقد للغاية 

يمكنك أيضًا بناء جدول بناءً على بنية التحليل التي قمت بها 

يجب أن تكون على دراية جيدة بمخرجات الجدول لكي تستخدم هذا الجدول، لأن هذا الجدول يحتوي على مجموعة واسعة من الحالات 

الرسم البياني للعقل 

أنا أحب استخدام الرسم البياني للعقل لتحليل وتقديم نماذج:

 

بنية الجدول 

بناءً على الرسم البياني للعقل، يمكننا إنشاء جدولين: جدول الرسائل، جدول القواعد، جدول الأنواع
جدول الرسائل: الرسائل الفعلية
جدول القواعد: نص، صورة نصية، صوت، إلخ
جدول الأنواع: نص، صورة نصية، صوت (رد افتراضي، رد الاشتراك)
أو يمكن أن يكون جدولين: جدول القواعد، جدول الرسائل (+ حقل النوع) 

أنا هنا أقوم بتصميم جدول واحد فقط: جدول الرسائل (+ حقل القاعدة + حقل النوع) 

تصميم بنية الجدول يتعلق بممارساتي اليومية، أنا أحب الأشياء البسيطة، لا تدع التصميم يصنع تصميمًا خاصًا، لأن هذا سيزيد من تعقيد النظام 

CREATE TABLE [dbo].[WC_MessageResponse](
 [Id] [varchar](50) NOT NULL,  --主键 
 [OfficalAccountId] [varchar](50) NULL, --所属公众号
 [MessageRule] [int] NULL,   --消息规则(枚举)
 [Category] [int] NULL,   --类型(枚举)
 [MatchKey] [varchar](1000) NULL,  --关键字
 [TextContent] [varchar](max) NULL, --文本内容
 [ImgTextContext] [varchar](max) NULL, --图文文本内容
 [ImgTextUrl] [varchar](1000) NULL, --图文图片URL
 [ImgTextLink] [varchar](1000) NULL, --图文图片超链接
 [MeidaUrl] [varchar](1000) NULL,  --语音URL
 [MeidaLink] [varchar](1000) NULL,  --语音超链接
 [Enable] [bit] NOT NULL,   --是否启用
 [IsDefault] [bit] NOT NULL,  --是否默认
 [Remark] [varchar](2000) NULL,  --شرح
 [Sort] [int] NOT NULL,   --排序
 [CreateTime] [datetime] NOT NULL,  --创建时间
 [CreateBy] [varchar](50) NOT NULL, --المؤسس
 [ModifyTime] [datetime] NOT NULL,  --修改时间
 [ModifyBy] [varchar](50) NULL,  --المعدل
 CONSTRAINT [PK_WC_MessageResponse] PRIMARY KEY CLUSTERED 
(
 [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
ALTER TABLE [dbo].[WC_MessageResponse] WITH CHECK ADD CONSTRAINT [FK_WC_MessageResponse_WC_OfficalAcconts] FOREIGN KEY([OfficalAccountId])
REFERENCES [dbo].[WC_OfficalAccounts] ([Id])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[WC_MessageResponse] CHECK CONSTRAINT [FK_WC_MessageResponse_WC_OfficalAcconts]
GO

表对应了两个枚举和关联主表公众号管理的主表 

CREATE TABLE [dbo].[WC_OfficalAccounts](
 [Id] [varchar](50) NOT NULL,  --主键
 [OfficalId] [varchar](200) NULL, --公众号的唯一ID
 [OfficalName] [varchar](200) NOT NULL, --公众号名称
 [OfficalCode] [varchar](200) NOT NULL, --公众号帐号
 [OfficalPhoto] [varchar](1000) NULL, --头像
 [OfficalKey] [varchar](500) NULL, --EncodingAESKey
 [ApiUrl] [varchar](1000) NULL,  --我们的资源服务器
 [Token] [varchar](200) NULL,  --Token
 [AppId] [varchar](200) NULL,  --AppId
 [AppSecret] [varchar](200) NULL, --Appsecret
 [AccessToken] [varchar](200) NULL, --访问Token
 [Remark] [varchar](2000) NULL,  --شرح
 [Enable] [bit] NOT NULL,  --هل تم التشغيل
 [IsDefault] [bit] NOT NULL,  --هل هو الرقم التلقائي الحالي
 [Category] [int] NOT NULL,  --التصنيف (معرف وسائل الإعلام، معرف الشركة، معرف الشخصي، معرف التطوير والاختبار)
 [CreateTime] [datetime] NOT NULL, --وقت التأسيس
 [CreateBy] [varchar](50) NOT NULL, --المؤسس
 [ModifyTime] [datetime] NOT NULL, --وقت التعديل
 [ModifyBy] [varchar](50) NULL,  --المعدل
 CONSTRAINT [PK_WC_OfficalAcconts] PRIMARY KEY CLUSTERED 
(
 [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

القائمة المرجعية المتبادلة 

 public enum WeChatReplyCategory
 {
 //文本
 Text =1,
 //الصور والنصوص
 Image =2,
 //صوت
 Voice =3,
 //المطابقة، لرد الكلمات المفتاحية
 Equal=4,
 //المحتوى، لرد الكلمات المفتاحية
 Contain = 5
 }
 public enum WeChatRequestRuleEnum
 {
 /// <summary>
 /// رد افتراضي، بدون معالجة
 /// </summary>
 Default =0,
 /// <summary>
 /// رد الاشتراك
 /// </summary>
 Subscriber =1,
 /// <summary>
 /// رد نص
 /// </summary>
 Text =2,
 /// <summary>
 /// رد صورة
 /// </summary>
 Image =3,
 /// <summary>
 /// رد صوت
 /// </summary>
 Voice =4,
 /// <summary>
 /// رد فيديو
 /// </summary>
 Video =5,
 /// <summary>
 /// رد رابط
 /// </summary>
 Link =6,
 /// <summary>
 /// رد موقع LBS
 /// </summary>
 Location =7,
 }

القائمة المرجعية في الواقع تعني الجداول الأخرى التي قمنا بتقليلها
 إلى هنا، يُعتقد أن تصميم الجدول أصبح واضحًا جدًا 

كود الخلفية 

الإضافة، الحذف، التحديث، البحث متعارف به بشكل عام، ينصب التركيز الرئيسي على الجانب الأمامي، يجب أن تحتوي الرسائل المقدمة من الجانب الأمامي على قواعد، أنواع لتعيين التعبير النهائي للرسالة

مدير

[HttpPost]
 [دعم الفلتر (اسم الفعل = "تحرير")]
 العمليه العامة PostData (WC_MessageResponseModel نموذج)
 {
  WC_OfficalAccountsModel هوية الحساب = هوية الحساب_BLL.الحصول على الحساب الحالي ();
  إذا (هو فارغ النموذج.معرف)
  {
  نموذج.معرف = مساعد النتائج.معرف جديد;
  }
  نموذج.مؤسس = حصول المستخدم على هوية المستخدم ();
  نموذج.وقت إنشاء = مساعد النتائج.وقت الحالي;
  نموذج.محرر = حصول المستخدم على هوية المستخدم ();
  نموذج.وقت التحرير = مساعد النتائج.وقت الحالي;
  نموذج.OfficalAccountId = هوية الحساب.معرف;
  نموذج.ممكن = صحيح;
  نموذج.هل هو افتراضي = صحيح;
  إذا (m_BLL.إرسال البيانات (مرفق أخطاء، نموذج))
  {
  مكتبة المعالجة السابقة.كتابة سجلات الخدمة (حصول المستخدم على هوية المستخدم ( "Id" + نموذج.معرف + ",OfficalAccountId" + نموذج.OfficalAccountId، "نجاح"، "حفظ"، "WC_MessageResponse");
  إرجاع Json (مكتبة المعالجة السابقة.إنشاء رسالة (1، موارد.نجاح الحفظ));
  }
  else
  {
  string ErrorCol = أخطاء.خطأ;
  مكتبة المعالجة السابقة.كتابة سجلات الخدمة (حصول المستخدم على هوية المستخدم ( "Id" + نموذج.معرف + ",OfficalAccountId" + نموذج.OfficalAccountId + "," + ErrorCol، "فشل"، "حفظ"، "WC_MessageResponse");
  return Json(JsonHandler.CreateMessage(0, Resource.SaveFail + ErrorCol));
  }
 }

BLL

public bool PostData(ref ValidationErrors errors, WC_MessageResponseModel model)
 {
  try
  {
  WC_MessageResponse entity = new WC_MessageResponse();
  if (IsExists(model.Id))
  {
   entity = m_Rep.GetById(model.Id);
  }
  entity.Id = model.Id;
  entity.OfficalAccountId = model.OfficalAccountId;
  entity.MessageRule = model.MessageRule;
  entity.Category = model.Category;
  entity.MatchKey = model.MatchKey;
  entity.TextContent = model.TextContent;
  entity.ImgTextContext = model.ImgTextContext;
  entity.ImgTextUrl = model.ImgTextUrl;
  entity.ImgTextLink = model.ImgTextLink;
  entity.MeidaUrl = model.MeidaUrl;
  entity.Enable = model.Enable;
  entity.IsDefault = model.IsDefault;
  entity.Remark = model.Remark;
  entity.CreateTime = model.CreateTime;
  entity.CreateBy = model.CreateBy;
  entity.Sort = model.Sort;
  entity.ModifyTime = model.ModifyTime;
  entity.ModifyBy = model.ModifyBy;
  إذا (m_Rep.PostData(entity))
  {
   return true;
  }
  else
  {
   errors.Add(Resource.NoDataChange);
   return false;
  }
  }
  catch (Exception ex)
  {
  errors.Add(ex.Message);
  ExceptionHander.WriteException(ex);
  return false;
  }
 }

DAL

public bool PostData(WC_MessageResponse model)
 {
  //إذا كانت جميع الأجهزة معطلة، فإن هذا يعني عدم تشغيل الرد
  إذا (model.Category == null)
  {
  return true;
  }
  //عند إعداد جميع القنوات على عدم الافتراضي
  ExecuteSqlCommand(string.Format("update [dbo].[WC_MessageResponse] set IsDefault=0 where OfficalAccountId ='{0}' and MessageRule={1}", model.OfficalAccountId, model.MessageRule));
  //إعادة الرد الافتراضي ورد الاشتراك، وليس التعامل مع الصور والنصوص، لأن لديهم 3 أنماط، ولكن واحد فقط هو افتراضي
  إذا (model.Category != (int)WeChatReplyCategory.Image && (model.MessageRule == (int)WeChatRequestRuleEnum.Default || model.MessageRule == (int)WeChatRequestRuleEnum.Subscriber))
  {
  //تحقق من وجود بيانات في قاعدة البيانات
  تعريف الـ entity = Context.WC_MessageResponse.Where(p => p.OfficalAccountId == model.OfficalAccountId && p.MessageRule == model.MessageRule && p.Category == model.Category).FirstOrDefault();
  if (entity != null)
  {
   //حذف القديم
   Context.WC_MessageResponse.Remove(entity);
  }
  }
  //جعل جميعها افتراضية
  ExecuteSqlCommand(string.Format("update [dbo].[WC_MessageResponse] set IsDefault=1 where OfficalAccountId ='{0}' and MessageRule={1} and Category={2}", model.OfficalAccountId, model.MessageRule,model.Category));
  //تعديل
  if(IsExist(model.Id))
  {
  Context.Entry<WC_MessageResponse>(model).State = EntityState.Modified;
  return Edit(model);
  }
  else { 
  return Create(model);
  }
 }

من الضروري توضيح DAL 

يوجد 3 أنواع من الردود الافتراضية والردود على الاهتمام: نص، صورة وتصريف (لكن يمكن أن يكون هناك واحد فقط، لذا هناك مجال IsDefault لتحديد أي رد يجب تنفيذه) لذا يجب معالجة هاتين القوانين بشكل منفصل، وإذا نظرت إلى جملة SQL التي تنفذها الكود في DAL، فإنها واضحة. 

لذا دعونا نتصميم الأمامي بلا حدود!

 

كيفية تصميم الأمامي؟ 

لننظر في مخطط تفصيلي: 

  

كود الأمامي الكامل 

<style>
 .formtable td {
 توجيه العمود: الأعلى;
 ملء: 10بكسل;
 }
 .formtable th {
 توجيه النص: اليسار;
 ملء: 10بكسل;
 ارتفاع: 30بكسل;
 }
 .formtablenormal {
 عرض: 500بكسل;
 }
 .formtablenormal th {
  حافة: 0بكسل;
  توجيه النص: اليمين;
 }
 .formtablenormal td {
  حافة: 0بكسل;
  vertical-align: middle;
 }
</style>
<script>
 //1文本2图文3语音
 var Category = {
 Text: 1,
 Image: 2,
 Voice: 3,
 Equal: 4,
 Contain: 5
 };
 //
 var RequestRule = {
 Default: 0,
 Subscriber: 1,
 Text: 2,
 Image: 3,
 Voice: 4,
 Video: 5,
 Link: 6,
 Location: 7
 };
 function initDefault() {
 $('#swText0').switchbutton({
  onChange: function(checked) {
  if (checked) {
   $('#swImage0').switchbutton("uncheck");
   ($("#swVoice0").switchbutton("uncheck"));
   $("#div01").show();
   $("#div02,#div03").hide();
   $("#Category").val(Category.Text);
  }
  }
 });
 $('#swImage0').switchbutton({
  onChange: function(checked) {
  if (checked) {
   ($("#swVoice0").switchbutton("uncheck"));
   ($("#swText0").switchbutton("uncheck"));
   $("#div02").show();
   $("#div01,#div03").hide();
   $("#Category").val(Category.Image);
   $("#List0").datagrid("resize");
  }
  }
 });
 $('#swVoice0').switchbutton({
  onChange: function(checked) {
  if (checked) {
   $('#swImage0').switchbutton("uncheck");
   ($("#swText0").switchbutton("uncheck"));
   $("#div03").show();
   $("#div01,#div02").hide();
   $("#Category").val(Category.Voice);
  }
  }
 });
 //文本
 $.post('@Url.Action("GetList")', {
  page: 1,
  rows: 1,
  category: Category.Text,
  messageRule: RequestRule.Default
 },
 function(data) {
  ما ي rows = data.rows;
  للفور (ما ي = 0; ما ي < rows.length; ما ي++) {
  if (rows[i].Category == Category.Text) {
   $("#Text0").val(rows[i].TextContent);
   إذا (rows[i].IsDefault) {
   $("#swText0").switchbutton("check");
   $('#swImage0').switchbutton("uncheck");
   ($("#swVoice0").switchbutton("uncheck"));
   }
  }
  }
 });
 //صوت
 $.post('@Url.Action("GetList")', {
  page: 1,
  rows: 1,
  category: Category.Voice,
  messageRule: RequestRule.Default
 },
 function (data) {
  ما ي rows = data.rows;
  للفور (ما ي = 0; ما ي < rows.length; ما ي++) {
  إذا (rows[i].Category == Category.Voice) {
   $("#VoiceTitle0").val(rows[i].TextContent);
   $("#VoiceContent0").val(rows[i].Remark);
   $("#VoiceUrl0").val(rows[i].MeidaUrl);
   إذا (rows[i].IsDefault) {
   $('#swVoice0').switchbutton("check");
   ($("#swText0").switchbutton("uncheck"));
   $('#swImage0').switchbutton("uncheck");
   }
  }
  }
 });
 $('#List0').datagrid({
  url: '@Url.Action("GetList")?messageRule=' + RequestRule.Default + '&category=' + Category.Image
  width: SetGridWidthSub(40),
  methord: 'post',
  height: SetGridHeightSub(175),
  fitColumns: true,
  sortName: 'Sort',
  sortOrder: 'asc',
  idField: 'Id',
  pageSize: 15,
  pageList: [15, 20, 30, 40, 50],
  pagination: true,
  striped: true,
  //奇偶行是否区分
  singleSelect: true,
  onLoadSuccess: function (data) {
  إذا (data.rows.length > 0)
  {
   إذا (data.rows[0].IsDefault) {
   ($("#swImage0").switchbutton("check"));
   ($("#swText0").switchbutton("uncheck"));
   ($("#swVoice0").switchbutton("uncheck"));
   $("#Category").val(Category.Image);
   }
  }
  },
  //单选模式
  //rownumbers: true,//行号
  columns: [[{
  field: 'Id',
  title: 'Id',
  width: 80,
  hidden: true
  },
  {
  field: 'TextContent',
  title: '标题',
  width: 80,
  sortable: true
  },
  {
  field: 'ImgTextUrl',
  title: 'صورة',
  width: 50 ,
  sortable: true,
  align: 'center', formatter: function (value) { return "<img width='80' height='80' src='" + value + "'/>" }
  },
  {
  field: 'ImgTextLink',
  title: '超链接',
  width: 80,
  sortable: true
  },
  {
  field: 'ImgTextContext',
  title: '回复内容',
  width: 180 ,
  sortable: true
  },
  }]
 });
 ($("#btnCreate02").unbind().click(function () {);
  ($("#modalwindow0").window({);
  عنوان: '@Resource.Create',
  عرض: 700,
  طول: 500,
  إيقونات: 'fa fa-plus'
  }).window('open');
 });
 ($("#btnSava01").unbind().click(function() {);
  //إجابة افتراضية
  $("#MessageRule").val(RequestRule.Default);
  if ($.trim($("#Text0").val())=="")
  {
  $.messager.alert('@Resource.Tip', '内容必须填写!', 'warning');
  العودة;
  }
  ($("#TextContent").val($.trim($("#Text0").val()));
  إذا ($("#form").valid()) {
  $.ajax({
   url: "@Url.Action("PostData")",
   نوع: "Post",
   بيانات: $("#form").serialize(),
  نوع البيانات: "json",
  نجاح: function(data) {
   $.messageBox5s('@Resource.Tip', data.message);
  }
  });
 }
 });
 ($("#btnSava02").unbind().click(function () {);
  إذا كان ($.trim($("#ImageTitle0").val()) == "");
  $.messager.alert('@Resource.Tip', 'يجب ملء العنوان!', 'warning');
  العودة;
  }
  إذا كان ($.trim($("#ImageUrl0").val()) == "");
  $.messager.alert('@Resource.Tip', 'صورة يجب أن يتم رفعها!', 'warning');
  العودة;
  }
  إذا كان ($.trim($("#Sort0").val()) == "");
  $.messager.alert('@Resource.Tip', 'يحتاج إلى إدخال الترتيب!', 'warning');
  العودة;
  }
  //ردود نصية وصورية
  $("#MessageRule").val(RequestRule.Default);
  ($("#TextContent").val($("#ImageTitle0").val()));
  ($("#ImgTextUrl").val($("#ImageUrl0").val()));
  ($("#ImgTextContext").val($("#ImageContent0").val()));
  ($("#ImgTextLink").val($("#ImageLink0").val()));
  ($("#Sort").val($("#Sort0").val()));
  إذا ($("#form").valid()) {
  $.ajax({
   url: "@Url.Action("PostData")",
   نوع: "Post",
  بيانات: $("#form").serialize(),
  نوع البيانات: "json",
  نجاح: function(data) {
   إذا (data.type == 1) {
   $("#Id").val("");
   ($("#List0").datagrid('reload'));
   ($("#modalwindow0").window('close'));
   ($("#ImageTitle0").val(""));
   ($("#form02 img").attr("src", "/Content/Images/NotPic.jpg"));
   ($("#ImageContent0").val(""));
   ($("#ImageLink0").val(""));
   $("#Sort0").val(0);
   $('#FileUpload02').val('');
   }
   $.messageBox5s('@Resource.Tip', data.message);
  }
  });
 }
 });
 $("#btnSava03").unbind().click(function() {
  //إجابة افتراضية
  $("#MessageRule").val(RequestRule.Default);
  if ($.trim($("#Text0").val())=="")
  {
  if ($.trim($("#VoiceTitle0").val()) == "") {
   $.messager.alert('@Resource.Tip', 'يجب ملء العنوان!', 'warning');
   العودة;
  }
  if ($.trim($("#VoiceUrl0").val()) == "") {
   $.messager.alert('@Resource.Tip', 'يجب رفع الصوت!', 'warning');
   العودة;
  }
  $("#TextContent").val($("#VoiceTitle0").val());
  $("#MeidaUrl").val($("#VoiceUrl0").val());
  $("#Remark").val($("#VoiceContent0").val());
  }
  إذا ($("#form").valid()) {
  $.ajax({
   url: "@Url.Action("PostData")",
   نوع: "Post",
  بيانات: $("#form").serialize(),
  نوع البيانات: "json",
  نجاح: function(data) {
   $.messageBox5s('@Resource.Tip', data.message);
  }
  });
 }
 });
 }
 function initSubscriber() {
  $('#swText1').switchbutton({
  onChange: function(checked) {
  if (checked) {
   $("#swImage1").switchbutton("uncheck");
   $("#swVoice1").switchbutton("uncheck");
   $("#div11").show();
   $("#div12,#div13").hide();
   $("#Category").val(Category.Text);
  }
  }
 });
 $('#swImage1').switchbutton({
  onChange: function(checked) {
  if (checked) {
   $("#swVoice1").switchbutton("uncheck");
   $("#swText1").switchbutton("uncheck");
   $("#div12").show();
   $("#div11,#div13").hide();
   $("#Category").val(Category.Image);
   $("#List1").datagrid("resize");
  }
  }
 });
 $('#swVoice1').switchbutton({
  onChange: function(checked) {
  if (checked) {
   $("#swImage1").switchbutton("uncheck");
   $("#swText1").switchbutton("uncheck");
   $("#div13").show();
   $("#div11,#div12").hide();
   $("#Category").val(Category.Voice);
  }
  }
 });
 //文本
 $.post('@Url.Action("GetList")', {
  page: 1,
  rows: 1,
  category: Category.Text,
  messageRule: RequestRule.Subscriber
 },
 function(data) {
  ما ي rows = data.rows;
  للفور (ما ي = 0; ما ي < rows.length; ما ي++) {
  if (rows[i].Category == Category.Text) {
   $("#Text1").val(rows[i].TextContent);
   إذا (rows[i].IsDefault) {
   $('#swText1').switchbutton("check");
   $("#swImage1").switchbutton("uncheck");
   $("#swVoice1").switchbutton("uncheck");
   }
  }
  }
 });
 //صوت
 $.post('@Url.Action("GetList")', {
  page: 1,
  rows: 1,
  category: Category.Voice,
  messageRule: RequestRule.Subscriber
 },
 function (data) {
  ما ي rows = data.rows;
  للفور (ما ي = 0; ما ي < rows.length; ما ي++) {
  إذا (rows[i].Category == Category.Voice) {
   $("#VoiceTitle1").val(rows[i].TextContent);
   $("#VoiceContent1").val(rows[i].Remark);
   إذا (rows[i].IsDefault) {
   $("#swVoice1").switchbutton("check");
   $("#swText1").switchbutton("uncheck");
   $("#swImage1").switchbutton("uncheck");
   }
  }
  }
 });
 $("#List1").datagrid({
  url: '@Url.Action("GetList")?messageRule=' + RequestRule.Subscriber + '&category=' + Category.Image,
  width: SetGridWidthSub(40),
  methord: 'post',
  height: SetGridHeightSub(175),
  fitColumns: true,
  sortName: 'Sort',
  sortOrder: 'asc',
  idField: 'Id',
  pageSize: 15,
  pageList: [15, 20, 30, 40, 50],
  pagination: true,
  striped: true,
  //奇偶行是否区分
  singleSelect: true,
  onLoadSuccess: function (data) {
  إذا (data.rows.length > 0)
  {
   إذا (data.rows[0].IsDefault) {
   $("#swImage1").switchbutton("check");
   $("#swText1").switchbutton("uncheck");
   $("#swVoice1").switchbutton("uncheck");
   }
  }
  },
  //单选模式
  //rownumbers: true,//行号
  columns: [[{
  field: 'Id',
  title: 'Id',
  width: 80,
  hidden: true
  },
  {
  field: 'TextContent',
  title: '标题',
  width: 80,
  sortable: true
  },
  {
  field: 'ImgTextUrl',
  title: 'صورة',
  width: 50 ,
  sortable: true,
  align: 'center', formatter: function (value) { return "<img width='80' height='80' src='" + value + "'/>" }
  },
  {
  field: 'ImgTextLink',
  title: '超链接',
  width: 80,
  sortable: true
  },
  {
  field: 'ImgTextContext',
  title: '回复内容',
  width: 180 ,
  sortable: true
  },
  }]
 });
 $("#btnCreate12").unbind().click(function () {
  $("#modalwindow1").window({
  عنوان: '@Resource.Create',
  عرض: 700,
  طول: 500,
  إيقونات: 'fa fa-plus'
  }).window('open');
 });
 $("#btnSava11").unbind().click(function() {
  //إجابة افتراضية
  $("#MessageRule").val(RequestRule.Subscriber);
  إذا كان $.trim($("#Text1").val())==""
  {
  $.messager.alert('@Resource.Tip', '内容必须填写!', 'warning');
  العودة;
  }
  $("#TextContent").val($.trim($("#Text1").val()));
  إذا ($("#form").valid()) {
  $.ajax({
   url: "@Url.Action("PostData")",
   نوع: "Post",
   بيانات: $("#form").serialize(),
  نوع البيانات: "json",
  نجاح: function(data) {
   $.messageBox5s('@Resource.Tip', data.message);
  }
  });
 }
 });
 $("#btnSava12").unbind().click(function () {}}
  إذا كان $.trim($("#ImageTitle1").val()) == "" {
  $.messager.alert('@Resource.Tip', 'يجب ملء العنوان!', 'warning');
  العودة;
  }
  إذا كان $.trim($("#ImageUrl1").val()) == "" {
  $.messager.alert('@Resource.Tip', 'صورة يجب أن يتم رفعها!', 'warning');
  العودة;
  }
  إذا كان $.trim($("#Sort1").val()) == "" {
  $.messager.alert('@Resource.Tip', 'يحتاج إلى إدخال الترتيب!', 'warning');
  العودة;
  }
  //ردود نصية وصورية
  $("#MessageRule").val(RequestRule.Subscriber);
  $("#TextContent").val($("#ImageTitle1").val());
  $("#ImgTextUrl").val($("#ImageUrl1").val());
  $("#ImgTextContext").val($("#ImageContent1").val());
  $("#ImgTextLink").val($("#ImageLink1").val());
  $("#Sort").val($("#Sort1").val());
  إذا ($("#form").valid()) {
  $.ajax({
   url: "@Url.Action("PostData")",
   نوع: "Post",
  بيانات: $("#form").serialize(),
  نوع البيانات: "json",
  نجاح: function(data) {
   إذا (data.type == 1) {
   $("#Id").val("");
   $("#List1").datagrid('reload');
   $("#modalwindow1").window('close');
   $("#ImageTitle1").val('');
   $("#form12 img").attr("src", "/Content/Images/NotPic.jpg");
   $("#ImageContent1").val('');
   $("#ImageLink1").val('');
   $("#Sort1").val(0);
   $('#FileUpload12').val('');
   }
   $.messageBox5s('@Resource.Tip', data.message);
  }
  });
 }
 });
 $("#btnSava13").unbind().click(function() {
  //إجابة افتراضية
  $("#MessageRule").val(RequestRule.Subscriber);
  إذا كان $.trim($("#Text1").val())==""
  {
  إذا كان $.trim($("#VoiceTitle1").val()) == "" {
   $.messager.alert('@Resource.Tip', 'يجب ملء العنوان!', 'warning');
   العودة;
  }
  إذا كان $.trim($("#VoiceUrl1").val()) == "" {
   $.messager.alert('@Resource.Tip', 'يجب رفع الصوت!', 'warning');
   العودة;
  }
  $("#TextContent").val($("#VoiceTitle1").val()));
  $("#MeidaUrl").val($("#VoiceUrl1").val());
  $("#Remark").val($("#VoiceContent1").val());
  }
  إذا ($("#form").valid()) {
  $.ajax({
   url: "@Url.Action("PostData")",
   نوع: "Post",
  بيانات: $("#form").serialize(),
  نوع البيانات: "json",
  نجاح: function(data) {
   $.messageBox5s('@Resource.Tip', data.message);
  }
  });
 }
 });
 }
 function initText() {
 $("#Category").val(Category.Equal);
 $('#List2').datagrid({
  url: '@Url.Action("GetList")?messageRule=' + RequestRule.Text,
  width: SetGridWidthSub(40),
  methord: 'post',
  height: SetGridHeightSub(100),
  fitColumns: true,
  sortName: 'CreateTime',}
  sortOrder: 'desc',
  idField: 'Id',
  pageSize: 15,
  pageList: [15, 20, 30, 40, 50],
  pagination: true,
  striped: true,
  //奇偶行是否区分
  singleSelect: true,
  //单选模式
  //rownumbers: true,//行号
  columns: [[{
  field: 'Id',
  title: 'Id',
  width: 80,
  hidden: true
  },
  {
  field: 'Category',
  title: 'Category',
  width: 80,
  sortable: true,
  hidden: true
  },
  {
  field: 'MatchKey',
  title: '关键字',
  width: 80,
  sortable: true,
  formatter: function (value,row,index){
   if (row.Category == Category.Equal) {
   return "(完全匹配)" + value
   } else {
   return "(模糊匹配)" + value
   }
  }
  },
  {
  field: 'TextContent',
  title: '回复内容',
  width: 80,
  sortable: true
  },
  }]
 });
 $('#swMessageRule2').switchbutton({
  onChange: function(checked) {
  if (checked) {
   $("#Category").val(Category.Equal);
  } else {
   $("#Category").val(Category.Contain);
  }
  }
 });
 $("#btnCreate2").unbind().click(function () {
  $("#modalwindow2").window({
  عنوان: '@Resource.Create',
  عرض: 700,
  height: 400,
  إيقونات: 'fa fa-plus'
  }).window('open');
 });
 $("#btnSava2").unbind().click(function () {
  if ($.trim($("#TextMatchKey2").val()) == "") {
  $.messager.alert('@Resource.Tip', 'يجب ملء الكلمات المفتاحية!', 'warning');
  العودة;
  }
  if ($.trim($("#Text2").val()) == "") {
  $.messager.alert('@Resource.Tip', '内容必须填写!', 'warning');
  العودة;
  }
  //回复文本
  $("#MessageRule").val(RequestRule.Text);
  $("#MatchKey").val($.trim($("#TextMatchKey2").val()));
  $("#TextContent").val($("#Text2").val());
  إذا ($("#form").valid()) {
  $.ajax({
   url: "@Url.Action("PostData")",
   نوع: "Post",
  بيانات: $("#form").serialize(),
  نوع البيانات: "json",
  نجاح: function(data) {
   إذا (data.type == 1) {
   $("#Id").val("");
   $("#List2").datagrid('reload');
   $("#modalwindow2").window('close');
   $("#TextMatchKey2").val("");
   $("#Text2").val("");
   }
   $.messageBox5s('@Resource.Tip', data.message);
  }
  });
 }
 });
 }
 function initImage() {
 $("#Category").val(Category.Equal);
 $('#List31').datagrid({
  url: '@Url.Action("GetListProperty")?messageRule=' + RequestRule.Image,
  width: 300,
  methord: 'post',
  height: SetGridHeightSub(100),
  fitColumns: true,
  sortName: 'CreateTime',}
  sortOrder: 'desc',
  idField: 'Id',
  pageSize: 15,
  pageList: [15, 20, 30, 40, 50],
  pagination: true,
  striped: true,
  //奇偶行是否区分
  singleSelect: true,
  onClickRow: function (index,data) {
  var row = $('#List31').datagrid('getSelected');
  if (row != null)
  {
   $('#List3').datagrid({url:'@Url.Action("GetList")?messageRule='+RequestRule.Image+'&category='+row.Category+'&matchKey='+row.MatchKey});
  }
  },
  //单选模式
  //rownumbers: true,//行号
  columns: [[{
  field: 'Id',
  title: 'Id',
  width: 80,
  hidden: true
  },
  {
  field: 'Category',
  title: 'Category',
  width: 80,
  sortable: true,
  hidden: true
  },
  {
  field: 'MatchKey',
  title: '关键字',
  width: 130 ,
  sortable: true,
  formatter: function (value, row, index) {
   if (row.Category == Category.Equal) {
   return "(完全匹配)" + value
   } else {
   return "(模糊匹配)" + value
   }
  }
  },
  {
  field: 'CreateTime',
  title: 'وقت إنشاء',
  width: 80,
  sortable: true
  },
  }]
 }).datagrid('getPager').pagination({ showPageList: true, showRefresh: false, displayMsg: '' });
 $('#List3').datagrid({
  url:'@Url.Action("GetList")?messageRule='+RequestRule.Image+'&category=x&matchKey=x',
  width: SetGridWidthSub(340),
  methord: 'post',
  height: SetGridHeightSub(100),
  fitColumns: true,
  sortName: 'Sort',
  sortOrder: 'asc',
  idField: 'Id',
  pageSize: 15,
  pageList: [15, 20, 30, 40, 50],
  pagination: true,
  striped: true,
  //奇偶行是否区分
  singleSelect: true,
  //单选模式
  //rownumbers: true,//行号
  columns: [[{
  field: 'Id',
  title: 'Id',
  width: 80,
  hidden: true
  },
  {
  field: 'Category',
  title: 'Category',
  width: 80,
  sortable: true,
  hidden: true
  },
  {
  field: 'TextContent',
  title: '标题',
  width: 80,
  sortable: true
  },
  {
  field: 'MatchKey',
  title: '关键字',
  width: 80,
  sortable: true,
  formatter: function (value,row,index){
   if (row.Category == Category.Equal) {
   return "(完全匹配)" + value
   } else {
   return "(模糊匹配)" + value
   }
  }
  },
  {
  field: 'ImgTextUrl',
  title: 'صورة',
  width: 50 ,
  sortable: true,
  align: 'center', formatter: function (value) { return "<img width='80' height='80' src='" + value + "'/>" }
  },
  {
  field: 'ImgTextLink',
  title: '超链接',
  width: 80,
  sortable: true
  },
  {
  field: 'ImgTextContext',
  title: '回复内容',
  width: 180 ,
  sortable: true
  },
  {
  field: 'Sort',
  title: 'ترتيب',
  width: 50 ,
  sortable: true
  },
  }]
 });
 $('#swMessageRule3').switchbutton({
  onChange: function(checked) {
  if (checked) {
   $("#Category").val(Category.Equal);
  } else {
   $("#Category").val(Category.Contain);
  }
  }
 });
 $("#btnCreate3").unbind().click(function () {
  $("#modalwindow3").window({
  عنوان: '@Resource.Create',
  عرض: 700,
  height: 550 ,
  إيقونات: 'fa fa-plus'
  }).window('open');
 });
 $("#btnSava3").unbind().click(function () {
  إذا كان $.trim($("#ImageTitle3").val()) == "" {
  $.messager.alert('@Resource.Tip', 'يجب ملء العنوان!', 'warning');
  العودة;
  }
  if ($.trim($("#TextMatchKey3").val()) == "") {
  $.messager.alert('@Resource.Tip', 'يجب ملء الكلمات المفتاحية!', 'warning');
  العودة;
  }
  if ($.trim($("#ImageUrl3").val()) == "") {
  $.messager.alert('@Resource.Tip', 'صورة يجب أن يتم رفعها!', 'warning');
  العودة;
  }
  //ردود نصية وصورية
  $("#MessageRule").val(RequestRule.Image);
  $("#MatchKey").val($.trim($("#TextMatchKey3").val()));
  $("#TextContent").val($("#ImageTitle3").val());
  $("#ImgTextUrl").val($("#ImageUrl3").val());
  $("#ImgTextContext").val($("#ImageContent3").val());
  $("#ImgTextLink").val($("#ImageLink3").val());
  $("#Sort").val($("#Sort3").val());
  إذا ($("#form").valid()) {
  $.ajax({
   url: "@Url.Action("PostData")",
   نوع: "Post",
  بيانات: $("#form").serialize(),
  نوع البيانات: "json",
  نجاح: function(data) {
   إذا (data.type == 1) {
   $("#Id").val("");
   $("#List3").datagrid('reload');
   $("#List31").datagrid('reload');
   $("#modalwindow3").window('close');
   $("#ImageTitle3").val('');
   $("#form3 img").attr("src", "/Content/Images/NotPic.jpg");
   $("#ImageContent3").val('');
   $("#ImageLink3").val('');
   $("#Sort3").val(0);
   $('#FileUpload3').val('');
   $("#TextMatchKey3").val('');
   }
   $.messageBox5s('@Resource.Tip', data.message);
  }
  });
 }
 });
 }
 function initVoice() {
 $("#Category").val(Category.Equal);
 $('#List4').datagrid({
  url: '@Url.Action("GetList")?messageRule=' + RequestRule.Voice,
  width: SetGridWidthSub(40),
  methord: 'post',
  height: SetGridHeightSub(100),
  fitColumns: true,
  sortName: 'CreateTime',}
  sortOrder: 'desc',
  idField: 'Id',
  pageSize: 15,
  pageList: [15, 20, 30, 40, 50],
  pagination: true,
  striped: true,
  //奇偶行是否区分
  singleSelect: true,
  //单选模式
  //rownumbers: true,//行号
  columns: [[{
  field: 'Id',
  title: 'Id',
  width: 80,
  hidden: true
  },
  {
  field: 'Category',
  title: 'Category',
  width: 80,
  sortable: true,
  hidden: true
  },
  {
  field: 'TextContent',
  title: '标题',
  width: 80,
  sortable: true
  },
  {
  field: 'MatchKey',
  title: '关键字',
  width: 80,
  sortable: true,
  formatter: function (value,row,index){
   if (row.Category == Category.Equal) {
   return "(完全匹配)" + value
   } else {
   return "(模糊匹配)" + value
   }
  }
  },
  {
  field: 'MeidaUrl',
  title: '语音',
  width: 80,
  sortable: true,
  align: 'center', formatter: function (value) { return "<img width='80' height='80' src='" + value + "'/>" }
  },
  {
  field: 'ImgTextLink',
  title: '超链接',
  width: 80,
  sortable: true
  },
  {
  field: 'ImgTextContext',
  title: '回复内容',
  width: 80,
  sortable: true
  },
  }]
 });
 $('#swMessageRule4').switchbutton({
  onChange: function(checked) {
  if (checked) {
   $("#Category").val(Category.Equal);
  } else {
   $("#Category").val(Category.Contain);
  }
  }
 });
 $("#btnCreate4").unbind().click(function() {
  $("#modalwindow4").window({
  عنوان: '@Resource.Create',
  عرض: 700,
  طول: 500,
  إيقونات: 'fa fa-plus'
  }).window('open');
 });
 $("#btnSava4").unbind().click(function () {
  إذا ($.trim($("#VoiceTitle4").val()) == "") {
  $.messager.alert('@Resource.Tip', 'يجب ملء العنوان!', 'warning');
  العودة;
  }
  إذا ($.trim($("#TextMatchKey4").val()) == "") {
  $.messager.alert('@Resource.Tip', 'يجب ملء الكلمات المفتاحية!', 'warning');
  العودة;
  }
  إذا ($.trim($("#VoiceUrl4").val()) == "") {
  $.messager.alert('@Resource.Tip', 'يجب رفع الصوت!', 'warning');
  العودة;
  }
  //ردود نصية وصورية
  $("#MessageRule").val(RequestRule.Voice);
  $("#MatchKey").val($("#TextMatchKey4").val());
  $("#TextContent").val($("#VoiceTitle4").val());
  $("#MeidaUrl").val($("#VoiceUrl4").val());
  $("#Remark").val($("#VoiceContent4").val());
  إذا ($("#form").valid()) {
  $.ajax({
   url: "@Url.Action("PostData")",
   نوع: "Post",
  بيانات: $("#form").serialize(),
  نوع البيانات: "json",
  نجاح: function(data) {
   إذا (data.type == 1) {
   $("#Id").val("");
   $("#List4").datagrid('reload');
   $("#modalwindow4").window('close');
   $("#TextMatchKey4").val("");
   $("#VoiceTitle4").val("");
   $("#VoiceUrl4").val("");
   $("#VoiceContent4").val("");
   $("#FileUpload4").val("");
   $("#form3 img").attr("src", "/Content/Images/NotPic.jpg");
   }
   $.messageBox5s('@Resource.Tip', data.message);
  }
  });
 }
 });
 }
 $(function() {
 $('#tt').tabs({
  justified: true,
  width: '100%',
  height: $(window).height() - 20
 });
 $('#tt').tabs({
  onSelect: function(title, index) {
  switch (index) {
   case RequestRule.Default:
   initDefault();
   break;
   case RequestRule.Subscriber:
   initSubscriber();
   break;
   case RequestRule.Text:
   initText();
   break;
   case RequestRule.Image:
   initImage();
   break;
   case RequestRule.Voice:
   initVoice();
   break;
  }
  }
 });
 //初始化第一个标签
 initDefault();
 //自动宽高
 $(window).resize(function() {
  $('#tt').tabs({
  height:$(window).height() - 20
  });
  //$('#List2').datagrid('resize', {
  // width: SetGridWidthSub(40),
  // height: SetGridHeightSub(100)
  //});
 });
 });
 $(function () {
 $('input.textbox').validatebox().bind('blur', function () {
  $(this).validatebox('enableValidation').validatebox('validate');
 });
 })
</script>
<form id="form" method="post">
 <input type="hidden" id="Id" name="Id" />
 <input type="hidden" id="MessageRule" name="MessageRule" />
 <input type="hidden" id="Category" name="Category" />
 <input type="hidden" id="MatchKey" name="MatchKey" />
 <input type="hidden" id="TextContent" name="TextContent" />
 <input type="hidden" id="ImgTextContext" name="ImgTextContext" />
 <input type="hidden" id="ImgTextUrl" name="ImgTextUrl" />
 <input type="hidden" id="ImgTextLink" name="ImgTextLink" />
 <input type="hidden" id="MeidaUrl" name="MeidaUrl" />
 <input type="hidden" id="MeidaLink" name="MeidaLink" />
 <input type="hidden" id="Remark" name="Remark" />
 <input type="hidden" id="Sort" name="Sort" value="0" />
 <input type="hidden" id="CreateTime" name="CreateTime" />
 <input type="hidden" id="CreateBy" name="CreateBy" />
 <input type="hidden" id="ModifyTime" name="ModifyTime" />
 <input type="hidden" id="ModifyBy" name="ModifyBy" />
</form>
<div style="padding:10px;">
 <div id="tt" class="easyui-tabs">
  <div title="[#1#]"> 
  <table class="formtable" style="height:45px; line-height:45px; width:100%; border-bottom:1px solid #e7eaec">
   <tr>
   <td style="width:100px;">
    文本: @Html.SwitchButtonByEdit("swText0", false)
   </td>
   <td style="width:100px;">
    图文: @Html.SwitchButtonByEdit("swImage0", false)
   </td>
   <td style="width:100px;">
    语音: @Html.SwitchButtonByEdit("swVoice0", false)
   </td>
   <td></td>
   <td style="width:300px;">
    <div class="color-green">الحساب العام الحالي: <span id="CurrentOfficalAccount">@ViewBag.CurrentOfficalAcount</span></div>
   </td>
   </tr>
  </table>
  <div id="div01" class="displaynone">
   <div class="mvctool bgb">
   @Html.ToolButton("btnSava01", "fa fa-plus", "提交保存", ref perm, "Edit", false)
   </div>
   <textarea id="Text0" style="width: 300px;height: 330px; margin:20px;"></textarea>
   </div>
  <div id="div02" class="displaynone">
   <div class="mvctool bgb">
   @Html.ToolButton("btnCreate02", "fa fa-search", "添加回复", ref perm, "Edit", false)
   </div>
   <div id="modalwindow0" class="easyui-window" style="width:600px; height:550px;" data-options="modal:true,closed: true,minimizable:false,shadow:false">
   <div class="mvctool bgb">
    @Html.ToolButton("btnSava02", "fa fa-search", "提交保存", ref perm, "Edit", false)
   </div>
   <table class="formtablenormal">
    <tr><th>标题: </th><td><input type="text" id="ImageTitle0" class="textbox" data-options="required:true" /></td></tr>
    <tr>
    <th>صورة: </th>
    <td>
     <form id="form02" method="post">
     <input type="hidden" name="ImageUrl0" id="ImageUrl0" />
     <img class="expic" src="/Content/Images/NotPic.jpg" />
     <br />
     <a href="javascript:$('#FileUpload02').trigger('click');" class="files">@Resource.Browse</a>
     <input type="file" id="FileUpload02" class="displaynone" name="FileUpload02" onchange="Upload('SingleFile', 'ImageUrl0', 'FileUpload02', '1', '1', '#form02');" />
     <span class="uploading">@Resource.Uploading</span>
     </form>
    </tr>
    <tr><th>内容: </th><td><textarea id="ImageContent0" style="width: 300px; height: 100px;"></textarea></td></tr>
    <tr><th>链接: </th><td><input type="text" id="ImageLink0" /></td></tr>
    <tr><th>排序: </th><td><input type="number" id="Sort0" value="0" /></td></tr>
   </table>
   </div>
   <div style="padding:10px;">
   <table id="List0"></table>
   </div> 
  </div>
  <div id="div03" class="displaynone">
   <div class="mvctool bgb">
   @Html.ToolButton("btnSava03", "fa fa-plus", "提交保存", ref perm, "Edit", false)
   </div>
    <table class="formtablenormal" style="margin:20px;">
     <tr><th>标题: </th><td><input type="text" id="VoiceTitle0" /></td></tr>
     <tr><th>语音: </th><td>
        <form id="form03" method="post">
        <input type="text" name="VoiceUrl0" class="left" id="VoiceUrl0" />
        <a href="javascript:$('#FileUpload03').trigger('click');" class="files">@Resource.Browse</a>
        <input type="file" accept="audio/mpeg" id="FileUpload03" class="displaynone" name="FileUpload03" onchange="Upload('SingleFile', 'VoiceUrl0', 'FileUpload03', '', '', '#form03');" />
        <span class="uploading">@Resource.Uploading</span>
        </form>
     </td></tr>
     <tr><th>الوصف: </th><td><textarea id="VoiceContent0" style="width:335px; height:300px;"></textarea></td></tr>
    </table>
   </div> 
  </div>
  <div title="[#2#]" >
  <table class="formtable" style="height:45px; line-height:45px; width:100%; border-bottom:1px solid #e7eaec">
   <tr>
   <td style="width:100px;">
    النص: @Html.SwitchButtonByEdit("swText1", false)
   </td>
   <td style="width:100px;">
    الصور والنصوص: @Html.SwitchButtonByEdit("swImage1", false)
   </td>
   <td style="width:100px;">
    الصوت: @Html.SwitchButtonByEdit("swVoice1", false)
   </td>
   <td></td>
   <td style="width:300px;">
    <div class="color-green">الحساب العام الحالي: <span id="CurrentOfficalAccount">@ViewBag.CurrentOfficalAcount</span></div>
   </td>
   </tr>
  </table>
  <div id="div11" class="displaynone">
   <div class="mvctool bgb">
   @Html.ToolButton("btnSava11", "fa fa-plus", "تقديم الحفظ", ref perm, "Edit", false)
   </div>
   <textarea id="Text1" style="width: 300px;height: 330px; margin:20px;"></textarea>
  </div>
  <div id="div12" class="displaynone">
   <div class="mvctool bgb">
   @Html.ToolButton("btnCreate12", "fa fa-search", "添加回复", ref perm, "Edit", false)
   @Html.ToolButton("btnEdit12", "fa fa-search", "编辑", ref perm, "Edit", true)
   @Html.ToolButton("btnDelete12", "fa fa-search", "删除", ref perm, "Delete", false)
   </div>
   <div id="modalwindow1" class="easyui-window" style="width:600px; height:550px;" data-options="modal:true,closed: true,minimizable:false,shadow:false">
   <div class="mvctool bgb">
    @Html.ToolButton("btnSava12", "fa fa-search", "提交保存", ref perm, "Edit", false)
   </div>
   <table class="formtablenormal">
    <tr><th>标题: </th><td><input type="text" id="ImageTitle1" class="textbox" data-options="required:true" /></td></tr>
    <tr>
    <th>صورة: </th>
    <td>
     <form id="form12" method="post">
     <input type="hidden" name="ImageUrl1" id="ImageUrl1" />
     <img class="expic" src="/Content/Images/NotPic.jpg" />
     <br />
     <a href="javascript:$('#FileUpload12').trigger('click');" class="files">@Resource.Browse</a>
     <input type="file" id="FileUpload12" class="displaynone" name="FileUpload12" onchange="Upload('SingleFile', 'ImageUrl1', 'FileUpload12', '1', '1', '#form12');" />
     <span class="uploading">@Resource.Uploading</span>
     </form>
    </tr>
    <tr><th>内容: </th><td><textarea id="ImageContent1" style="width: 300px; height: 100px;"></textarea></td></tr>
    <tr><th>链接: </th><td><input type="text" id="ImageLink1" /></td></tr>
    <tr><th>排序: </th><td><input type="number" id="Sort1" value="0" /></td></tr>
   </table>
   </div>
   <div style="padding:10px;">
   <table id="List1"></table>
   </div>
  </div>
  <div id="div13" class="displaynone">
   <div class="mvctool bgb">
   @Html.ToolButton("btnSava13", "fa fa-plus", "提交保存", ref perm, "Edit", false)
   </div>
   <table class="formtablenormal" style="margin:20px;">
   <tr><th>标题: </th><td><input type="text" id="VoiceTitle1" /></td></tr>
   <tr>
    <th>语音: </th>
    <td>
    <form id="form13" method="post">
     <input type="text" name="VoiceUrl1" class="left" id="VoiceUrl0" />
     <a href="javascript:$('#FileUpload13').trigger('click');" class="files">@Resource.Browse</a>
     <input type="file" accept="audio/mpeg" id="FileUpload13" class="displaynone" name="FileUpload13" onchange="Upload('SingleFile', 'VoiceUrl1', 'FileUpload13', '', '', '#form13');" />
     <span class="uploading">@Resource.Uploading</span>
    </form>
    </td>
   </tr>
   <tr><th>الوصف: </th><td><textarea id="VoiceContent1" style="width:335px; height:300px;"></textarea></td></tr>
   </table>
  </div> 
  </div>
  <div title="[#3#]" style="padding:10px">
  <div class="mvctool ">
   @Html.ToolButton("btnCreate2", "fa fa-search", "إضافة رد", ref perm, "Edit", true)
   @Html.ToolButton("btnEdit2", "fa fa-search", "تحرير", ref perm, "Edit", true)
   @Html.ToolButton("btnDelete2", "fa fa-search", "حذف", ref perm, "Delete", false)
   <div class="rightdiv color-green">
   العمليات الحالية على حساب التطبيق: <span id="CurrentOfficalAccount">@ViewBag.CurrentOfficalAcount</span>
   </div>
  </div>
  <div id="modalwindow2"
   class="easyui-window"
   style="width:600px; height:500px;" data-options="modal:true,closed: true,minimizable:false,shadow:false">
   <div class="mvctool bgb">
   @Html.ToolButton("btnSava2", "fa fa-search", "حفظ الإرسال", ref perm, "Edit", false)
   <div class="rightdiv color-green">
    العمليات الحالية على حساب التطبيق: <span id="CurrentOfficalAccount">@ViewBag.CurrentOfficalAcount</span>
   </div>
   </div>
   <table class="formtablenormal">
   <tr>
    <th>关键字: </th>
    <td>
    <input type="text" id="TextMatchKey2" />
    </td>
   </tr>
   <tr>
    <th>规则: </th>
    <td>
    @Html.SwitchButtonByEdit("swMessageRule2", true, "المطابقة الغير دقيقة (المفتاح يحتوي على المحتوى) ", "المطابقة الدقيقة (المحتوى والمفتاح يتطابقان بشكل كامل)", "280")
    </td>
   </tr>
   <tr>
    <th>内容: </th>
    <td>
    <textarea id="Text2" style="width: 280px;height:200px"></textarea>
    </td>
   </tr>
   </table>
  </div>
  <table id="List2"></table>
  </div>
  <div title="[#4#]" style="padding:10px">
  <div class="mvctool">
   @Html.ToolButton("btnCreate3", "fa fa-search", "إضافة رد", ref perm, "Edit", true)
   @Html.ToolButton("btnEdit3", "fa fa-search", "编辑", ref perm, "Edit", true)
   @Html.ToolButton("btnDelete3", "fa fa-search", "حذف", ref perm, "Delete", false)
   <div class="rightdiv color-green">
   العمليات الحالية على حساب التطبيق: <span id="CurrentOfficalAccount">@ViewBag.CurrentOfficalAcount</span>
   </div>
  </div>
  <div id="modalwindow3" class="easyui-window" style="width:600px; height:550px;" data-options="modal:true,closed: true,minimizable:false,shadow:false">
   <div class="mvctool bgb">
   @Html.ToolButton("btnSava3", "fa fa-search", "حفظ الإدخال", ref perm, "Edit", false)
   <div class="rightdiv color-green">
    العمليات الحالية على حساب التطبيق: <span id="CurrentOfficalAccount">@ViewBag.CurrentOfficalAcount</span>
   </div>
   </div>
   <table class="formtablenormal">
   <tr><th>العنوان: </th><td><input type="text" id="ImageTitle3" /></td></tr>
   <tr>
    <th>关键字: </th>
    <td>
    <input type="text" id="TextMatchKey3" />
    </td>
   </tr>
   <tr>
    <th>规则: </th>
    <td>
    @Html.SwitchButtonByEdit("swMessageRule3", true, "التطابق المبهم (المفتاح يشمل المحتوى) ", "التطابق الكامل (المحتوى يتطابق مع المفتاح) ", "280")
    </td>
   </tr>
   <tr>
    <th>صورة: </th>
    <td>
    <form id="form3" method="post">
     <input type="hidden" name="ImageUrl3" id="ImageUrl3" />
     <img class="expic" src="/Content/Images/NotPic.jpg" />
     <br />
     <a href="javascript:$('#FileUpload3').trigger('click');" class="files">@Resource.Browse</a>
     <input type="file" id="FileUpload3" class="displaynone" name="FileUpload3" onchange="Upload('SingleFile', 'ImageUrl3', 'FileUpload3', '1', '1', '#form3');" />
     <span class="uploading">@Resource.Uploading</span>
    </form>
    </td>
   </tr>
   <tr><th>المحتوى: </th><td><textarea id="ImageContent3" style="width: 300px; height: 80px;"></textarea></td></tr>
   <tr><th>رابط: </th><td><input type="text" id="ImageLink3" /></td></tr>
   <tr><th>ترتيب: </th><td><input type="number" id="Sort3" value="0" /></td></tr>
   </table>
  </div>
  <table><tr><td><table id="List31"></table></td><td> </td><td><table id="List3"></table></td></tr></table>
  </div>
  <div title="[#5#]" style="padding:10px">
  <div class="mvctool ">
   @Html.ToolButton("btnCreate4", "fa fa-search", "إضافة رد", ref perm, "Edit", false)
   @Html.ToolButton("btnEdit4", "fa fa-search", "تعديل", ref perm, "Edit", true)
   @Html.ToolButton("btnDelete4", "fa fa-search", "حذف", ref perm, "Delete", false)
   <div class="rightdiv color-green">
   العمليات الحالية على حساب التطبيق: <span id="CurrentOfficalAccount">@ViewBag.CurrentOfficalAcount</span>
   </div>
  </div>
  <div id="modalwindow4"
   class="easyui-window"
   style="width:600px; height:500px;" data-options="modal:true,closed: true,minimizable:false,shadow:false">
   <div class="mvctool bgb">
   @Html.ToolButton("btnSava4", "fa fa-search", "حفظ الاستعراض", ref perm, "Edit", false)
   <div class="rightdiv color-green">
    العمليات الحالية على حساب التطبيق: <span id="CurrentOfficalAccount">@ViewBag.CurrentOfficalAcount</span>
   </div>
   </div>
   <table class="formtablenormal">
   <tr><th>标题: </th><td><input type="text" id="VoiceTitle4" /></td></tr>
   <tr>
    <th>关键字: </th>
    <td>
    <input type="text" id="TextMatchKey4" />
    </td>
   </tr>
   <tr>
    <th>规则: </th>
    <td>
    @Html.SwitchButtonByEdit("swMessageRule4", true, "模糊匹配(关键字包含内容) ", "完全匹配(内容与关键字完全匹配)", "280")
    </td>
   </tr>
   <tr>
    <th>语音: </th>
    <td>
    <form id="form4" method="post">
     <input type="text" class="left" name="VoiceUrl4" id="VoiceUrl4" />
     <a href="javascript:$('#FileUpload4').trigger('click');" class="files">@Resource.Browse</a>
     <input type="file" id="FileUpload4" accept="audio/mpeg" class="displaynone" name="FileUpload4" onchange="Upload('SingleFile', 'VoiceUrl4', 'FileUpload4', '', '', '#form4');" />
     <span class="uploading">@Resource.Uploading</span>
    </form>
    </td>
   </tr>
   <tr><th>描述: </th><td><textarea id="VoiceContent4" style="width: 300px; height: 100px;"></textarea></td></tr>
   </table>
  </div>
  <table id="List4"></table>
  </div>
  @*<div title="[#6#]"
   style="padding:10px">
  </div>*@
  @*<div title="[#7#]"
   styIe="padding:10px">
  </div>
  <div title="[#8#]"
   style="padding:10px">
  </div>*@
 </div>
 </div>

استخدام رسم الخريطة الذهنية للمحطة الأمامية لفهم رموز الكود الأمامي بسرعة، وتطبيقها في الواقع 

الخلاصة 

إدارة الرسائل هي أمر يتطلب مهارة كبيرة

1. في حالة عدم وجود رد على الرسالة، يجب علينا تفعيل الرد الافتراضي، لا يكون المستخدمون قد حصلوا على رد، مما يؤدي إلى فقدان التجربة 

2. تصميم الكلمات المفتاحية عادة ما يكون مرتبطًا بشكل دائري، وهو له دور في التوجيه
مثال:

الكلمات المفتاحية: (أنا أريد) الرد: اضغط 1 للانضمام للحصول على هدية واحدة، اضغط 2 للحصول على 50 يورو مباشرة
الكلمات المفتاحية: (1) الرد: اضغط 3 للحصول على كوب من شاي طويل الأنياب، اضغط 4 للحصول على شاي بورشا
الكلمات المفتاحية: (3 أو 4) الرد: يرجى إرسال عنوانك وأرقامك وتلميذك
بهذا سنحصل على محادثة كاملة بين النظام والمستخدم، بالطبع، يجب علينا أيضًا معالجة معلومات المستخدم الأخيرة.

تم جمع هذا المقال في 'مجموع تعليمات تطوير ASP.NET WeChat

للحصول على مزيد من المعلومات حول النظام الإداري، يرجى النقر على 'موضوع النظام الإداري' للتعلم.

هذا هو نهاية محتوى هذا المقال، نأمل أن يكون قد ساعدكم في التعلم، ونأمل أن تدعموا تعليمات النطق.

البيان: محتويات هذا المقال تم جمعها من الإنترنت، ملكية حقوق النشر لصاحبها، محتويات الملف تم إرسالها من قبل مستخدمي الإنترنت بطرقهم الخاصة، هذا الموقع لا يمتلك حقوق الملكية، لم يتم تعديل المحتوى بشكل إنساني، ولا يتحمل أي مسؤولية قانونية ذات صلة. إذا كنت قد وجدت محتوى يشتبه في انتهاك حقوق النسخ، فلا تتردد في إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال # ب @) لتقديم الشكوى، وتقديم الدليل المتعلق، إذا تم التحقق من ذلك، فإن هذا الموقع سيزيل المحتوى المتهجم على حقوق النسخ فوراً.

سيكون لك