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

Sistema di gestione后台管理系统 ASP.NET MVC5+EF6+EasyUI, sviluppo della piattaforma WeChat Public su gestione dei messaggi

Introduzione 

Riassumendo la lezione precedente, abbiamo familiarizzato con la richiesta e la risposta dei messaggi, in questa lezione costruiremo il tavolo del database, il design del tavolo è piuttosto complesso 

Puoi anche costruire il tavolo secondo la struttura dell'analisi che hai fatto 

Deve essere molto familiare con i risultati del tavolo per poterlo utilizzare, questa situazione del tavolo copre molto 

Grafico a mind map 

Mi piace molto usare il grafico a mind map per analizzare ed esprimere alcuni modelli:

 

Struttura del tavolo 

Secondo il grafico a mind map, possiamo creare tre tavoli: il tavolo dei messaggi, il tavolo delle regole, il tavolo dei tipi
Tavolo dei messaggi: i messaggi reali
Tavolo delle regole: testo, immagine-testo, audio ecc.
Tavolo dei tipi: testo, immagine-testo, audio (risposta predefinita, risposta di iscrizione)
Può essere anche due tavoli: il tavolo delle regole, il tavolo dei messaggi (+ un campo del tipo) 

Progetterò un solo tavolo qui: il tavolo dei messaggi (+ un campo delle regole + un campo del tipo) 

La struttura del tavolo è legata alle abitudini personali, preferisco cose semplici, non creare appositamente per il design, altrimenti aumenterà solo la complessità del sistema 

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,  -- Descrizione
 [Sort] [int] NOT NULL,   --排序
 [CreateTime] [datetime] NOT NULL,  --创建时间
 [CreateBy] [varchar](50) NOT NULL, -- Creato da
 [ModifyTime] [datetime] NOT NULL,  --修改时间
 [ModifyBy] [varchar](50) NULL,  -- Modificato da
 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,  -- Descrizione
 [Enable] [bit] NOT NULL,  -- Se è abilitato
 [IsDefault] [bit] NOT NULL,  -- Se è il numero di operazione predefinito corrente
 [Category] [int] NOT NULL,  -- Categoria (account media, account aziendale, account personale, account di sviluppo e test)
 [CreateTime] [datetime] NOT NULL, -- Tempo di creazione
 [CreateBy] [varchar](50) NOT NULL, -- Creato da
 [ModifyTime] [datetime] NOT NULL, -- Tempo di modifica
 [ModifyBy] [varchar](50) NULL,  -- Modificato da
 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]

Corrispondente enumerazione 

 public enum WeChatReplyCategory
 {
 //文本
 Text =1,
 // Immagine e testo
 Image =2,
 //语音
 Voice =3,
 // Uguale, utilizzato per rispondere a parole chiave
 Equal=4,
 // Include, utilizzato per rispondere a parole chiave
 Contain = 5
 }
 public enum WeChatRequestRuleEnum
 {
 /// <summary>
 /// Risposta predefinita, non elaborata
 /// </summary>
 Default =0,
 /// <summary>
 /// Risposta di iscrizione
 /// </summary>
 Subscriber =1,
 /// <summary>
 /// Risposta testo
 /// </summary>
 Text =2,
 /// <summary>
 /// Risposta immagine
 /// </summary>
 Image =3,
 /// <summary>
 /// Risposta vocale
 /// </summary>
 Voice =4,
 /// <summary>
 /// Risposta video
 /// </summary>
 Video =5,
 /// <summary>
 /// Risposta di collegamento
 /// </summary>
 Link =6,
 /// <summary>
 /// Risposta di posizione LBS
 /// </summary>
 Location =7,
 }

Enumerazione corrisponde effettivamente alle altre due tabelle che ho omesso
 Arrivati qui, la progettazione della tabella dovrebbe essere molto chiara 

codice后台 

Le operazioni di aggiunta, rimozione, modifica e ricerca sono molto comuni, con un focus principale sull'interfaccia utente. Nella gestione dei messaggi inviati dall'interfaccia utente, devono essere inclusi regole e tipi per specificare l'espressione finale del messaggio

Controller

[HttpPost]
 [SupportFilter(ActionName = "Edit")]
 public JsonResult PostData(WC_MessageResponseModel model)
 {
  WC_OfficalAccountsModel accountModel = account_BLL.GetCurrentAccount();
  if (string.IsNullOrEmpty(model.Id))
  {
  model.Id = ResultHelper.NewId;
  }
  model.CreateBy = GetUserId();
  model.CreateTime = ResultHelper.NowTime;
  model.ModifyBy = GetUserId();
  model.ModifyTime = ResultHelper.NowTime;
  model.OfficalAccountId = accountModel.Id;
  model.Enable = true;
  model.IsDefault = true;
  if (m_BLL.PostData(ref errors, model))
  {
  LogHandler.WriteServiceLog(GetUserId(), "Id" + model.Id + ",OfficalAccountId" + model.OfficalAccountId, "successo", "salvataggio", "WC_MessageResponse");
  return Json(JsonHandler.CreateMessage(1, Resource.SaveSucceed));
  }
  else
  {
  string ErrorCol = errors.Error;
  LogHandler.WriteServiceLog(GetUserId(), "Id" + model.Id + ",OfficalAccountId" + model.OfficalAccountId + "," + ErrorCol, "fallimento", "salvataggio", "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;
  if (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)
 {
  //Se tutte le leve sono spente, significa che la risposta non è attivata
  if (model.Category == null)
  {
  return true;
  }
  //Imposta tutti come non predefiniti
  ExecuteSqlCommand(string.Format("update [dbo].[WC_MessageResponse] set IsDefault=0 where OfficalAccountId ='{0}' and MessageRule={1}", model.OfficalAccountId, model.MessageRule));
  //Risposte predefinite e risposte di iscrizione, e non trattate separatamente come immagini, poiché hanno 3 modi, ma solo uno è predefinito
  if (model.Category != (int)WeChatReplyCategory.Image && (model.MessageRule == (int)WeChatRequestRuleEnum.Default || model.MessageRule == (int)WeChatRequestRuleEnum.Subscriber))
  {
  //Controlla se i dati esistono nel database
  var 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字段来表明执行哪种回复)所以这两个规则必须另外处理,且看DAL的代码执行的SQL语句便明白。 

所以我们尽情的设计前端吧!

 

前端如何设计? 

我们来看一个思维导图: 

  

前端完整代码 

<style>
 .formtable td {
 vertical-align: top;
 padding: 10px;
 }
 .formtable th {
 text-align: left;
 padding: 10px;
 height: 30px;
 }
 .formtablenormal {
 width: 500px;
 }
 .formtablenormal th {
  border: 0px;
  text-align: right;
 }
 .formtablenormal td {
  border: 0px;
  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");
   switchbutton("uncheck");
   $("#div01").show();
   $("#div02,#div03").hide();
   $("#Category").val(Category.Text);
  }
  }
 });
 $('#swImage0').switchbutton({
  onChange: function(checked) {
  if (checked) {
   switchbutton("uncheck");
   switchbutton("uncheck");
   $("#div02").show();
   $("#div01,#div03").hide();
   $("#Category").val(Category.Image);
   $("#List0").datagrid("resize");
  }
  }
 });
 $('#swVoice0').switchbutton({
  onChange: function(checked) {
  if (checked) {
   $('#swImage0').switchbutton("uncheck");
   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) {
  var rows = data.rows;
  for (var i = 0; i < rows.length; i++) {
  if (rows[i].Category == Category.Text) {
   $("#Text0").val(rows[i].TextContent);
   if (rows[i].IsDefault) {
   $('#swText0').switchbutton("check");
   $('#swImage0').switchbutton("uncheck");
   switchbutton("uncheck");
   }
  }
  }
 });
 //语音
 $.post('@Url.Action("GetList")', {
  page: 1,
  rows: 1,
  category: Category.Voice,
  messageRule: RequestRule.Default
 },
 function (data) {
  var rows = data.rows;
  for (var i = 0; i < rows.length; i++) {
  if (rows[i].Category == Category.Voice) {
   $("#VoiceTitle0").val(rows[i].TextContent);
   $("#VoiceContent0").val(rows[i].Remark);
   $("#VoiceUrl0").val(rows[i].MeidaUrl);
   if (rows[i].IsDefault) {
   $('#swVoice0').switchbutton("check");
   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,
  nomeDiOrdinamento: 'Sort',
  ordineDiOrdinamento: 'asc',
  idField: 'Id',
  pageSize: 15,
  pageList: [15, 20, 30, 40, 50],
  pagination: true,
  striped: true,
  //奇偶行是否区分
  singleSelect: true,
  onLoadSuccess: function (data) {
  if (data.rows.length > 0)
  {
   if (data.rows[0].IsDefault) {
   switchbutton("check");
   switchbutton("uncheck");
   switchbutton("uncheck");
   $("#Category").val(Category.Image);
   }
  }
  },
  //单选模式
  //rownumbers: true,//行号
  columns: [[{
  field: 'Id',
  title: 'Id',
  width: 80,
  hidden: true
  },
  {
  field: 'TextContent',
  title: '标题',
  width: 80,
  sortable: true
  },
  {
  campo: 'ImgTextUrl',
  titolo: 'Immagine',
  larghezza: 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: '回复内容',
  larghezza: 180,
  sortable: true
  },
  }]
 });
 unbind().click(function () {
  window({
  title: '@Resource.Create',
  width: 700,
  height: 500,
  iconCls: 'fa fa-plus'
  }).window('open');
 });
 unbind().click(function() {
  //risposta predefinita
  $("#MessageRule").val(RequestRule.Default);
  if ($.trim($("#Text0").val())=="")
  {
  $.messager.alert('@Resource.Tip', 'Il contenuto deve essere compilato!', 'warning');
  return;
  }
  val($.trim($("#Text0").val()));
  if ($("#form").valid()) {
  $.ajax({
   url: "@Url.Action("PostData")",
   type: "Post",
   data: $("#form").serialize(),
  dataType: "json",
  success: function(data) {
   $$.messageBox5s('@Resource.Tip', data.message);
  }
  });
 }
 });
 unbind().click(function () {
  if ($.trim($("#ImageTitle0").val()) == "") {
  $.messager.alert('@Resource.Tip', '标题必须填写!', 'warning');
  return;
  }
  if ($.trim($("#ImageUrl0").val()) == "") {
  $.messager.alert('@Resource.Tip', '图片必须上传!', 'warning');
  return;
  }
  if ($.trim($("#Sort0").val()) == "") {
  $.messager.alert('@Resource.Tip', 'L'ordinamento deve essere compilato!', 'warning');
  return;
  }
  //图文回复
  $("#MessageRule").val(RequestRule.Default);
  val($("#ImageTitle0").val());
  val($("#ImageUrl0").val());
  val($("#ImageContent0").val());
  val($("#ImageLink0").val());
  val($("#Sort0").val());
  if ($("#form").valid()) {
  $.ajax({
   url: "@Url.Action("PostData")",
   type: "Post",
  data: $("#form").serialize(),
  dataType: "json",
  success: function(data) {
   if (data.type == 1) {
   $("#Id").val("");
   datagrid('reload');
   window('close');
   val("");
   attr("src", "/Content/Images/NotPic.jpg");
   val("");
   val("");
   $("#Sort0").val(0);
   $('#FileUpload02').val('');
   }
   $$.messageBox5s('@Resource.Tip', data.message);
  }
  });
 }
 });
 $("#btnSava03").unbind().click(function() {
  //risposta predefinita
  $("#MessageRule").val(RequestRule.Default);
  if ($.trim($("#Text0").val())=="")
  {
  if ($.trim($("#VoiceTitle0").val()) == "") {
   $.messager.alert('@Resource.Tip', '标题必须填写!', 'warning');
   return;
  }
  if ($.trim($("#VoiceUrl0").val()) == "") {
   $.messager.alert('@Resource.Tip', '必须上传语音!', 'warning');
   return;
  }
  $("#TextContent").val($("#VoiceTitle0").val());
  $("#MeidaUrl").val($("#VoiceUrl0").val());
  $("#Remark").val($("#VoiceContent0").val());
  }
  if ($("#form").valid()) {
  $.ajax({
   url: "@Url.Action("PostData")",
   type: "Post",
  data: $("#form").serialize(),
  dataType: "json",
  success: 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) {
  var rows = data.rows;
  for (var i = 0; i < rows.length; i++) {
  if (rows[i].Category == Category.Text) {
   $("#Text1").val(rows[i].TextContent);
   if (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) {
  var rows = data.rows;
  for (var i = 0; i < rows.length; i++) {
  if (rows[i].Category == Category.Voice) {
   $("#VoiceTitle1").val(rows[i].TextContent);
   $("#VoiceContent1").val(rows[i].Remark);
   if (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,
  nomeDiOrdinamento: 'Sort',
  ordineDiOrdinamento: 'asc',
  idField: 'Id',
  pageSize: 15,
  pageList: [15, 20, 30, 40, 50],
  pagination: true,
  striped: true,
  //奇偶行是否区分
  singleSelect: true,
  onLoadSuccess: function (data) {
  if (data.rows.length > 0)
  {
   if (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
  },
  {
  campo: 'ImgTextUrl',
  titolo: 'Immagine',
  larghezza: 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: '回复内容',
  larghezza: 180,
  sortable: true
  },
  }]
 });
 $("#btnCreate12").unbind().click(function () {
  $("#modalwindow1").window({
  title: '@Resource.Create',
  width: 700,
  height: 500,
  iconCls: 'fa fa-plus'
  }).window('open');
 });
 $("#btnSava11").unbind().click(function() {
  //risposta predefinita
  $("#MessageRule").val(RequestRule.Subscriber);
  if ($.trim($("#Text1").val())=="")
  {
  $.messager.alert('@Resource.Tip', 'Il contenuto deve essere compilato!', 'warning');
  return;
  }
  $("#TextContent").val($.trim($("#Text1").val()));
  if ($("#form").valid()) {
  $.ajax({
   url: "@Url.Action("PostData")",
   type: "Post",
   data: $("#form").serialize(),
  dataType: "json",
  success: function(data) {
   $$.messageBox5s('@Resource.Tip', data.message);
  }
  });
 }
 });
 $("#btnSava12").unbind().click(function () {}}
  if ($.trim($("#ImageTitle1").val()) == "") {
  $.messager.alert('@Resource.Tip', '标题必须填写!', 'warning');
  return;
  }
  if ($.trim($("#ImageUrl1").val()) == "") {
  $.messager.alert('@Resource.Tip', '图片必须上传!', 'warning');
  return;
  }
  if ($.trim($("#Sort1").val()) == "") {
  $.messager.alert('@Resource.Tip', 'L'ordinamento deve essere compilato!', 'warning');
  return;
  }
  //图文回复
  $("#MessageRule").val(RequestRule.Subscriber);
  $("#TextContent").val($("#ImageTitle1").val());
  $("#ImgTextUrl").val($("#ImageUrl1").val());
  $("#ImgTextContext").val($("#ImageContent1").val());
  $("#ImgTextLink").val($("#ImageLink1").val());
  $("#Sort").val($("#Sort1").val());
  if ($("#form").valid()) {
  $.ajax({
   url: "@Url.Action("PostData")",
   type: "Post",
  data: $("#form").serialize(),
  dataType: "json",
  success: function(data) {
   if (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() {
  //risposta predefinita
  $("#MessageRule").val(RequestRule.Subscriber);
  if ($.trim($("#Text1").val())=="")
  {
  se ($.trim($("#VoiceTitle1").val()) == "") {
   $.messager.alert('@Resource.Tip', '标题必须填写!', 'warning');
   return;
  }
  se ($.trim($("#VoiceUrl1").val()) == "") {
   $.messager.alert('@Resource.Tip', '必须上传语音!', 'warning');
   return;
  }
  $("#TextContent").val($("#VoiceTitle1").val());
  $("#MeidaUrl").val($("#VoiceUrl1").val());
  $("#Remark").val($("#VoiceContent1").val());
  }
  if ($("#form").valid()) {
  $.ajax({
   url: "@Url.Action("PostData")",
   type: "Post",
  data: $("#form").serialize(),
  dataType: "json",
  success: 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({
  title: '@Resource.Create',
  width: 700,
  altezza: 400,
  iconCls: 'fa fa-plus'
  }).window('open');
 });
 $("#btnSava2").unbind().click(function () {
  if ($.trim($("#TextMatchKey2").val()) == "") {
  $.messager.alert('@Resource.Tip', '关键字必须填写!', 'warning');
  return;
  }
  if ($.trim($("#Text2").val()) == "") {
  $.messager.alert('@Resource.Tip', 'Il contenuto deve essere compilato!', 'warning');
  return;
  }
  // risposta testuale
  $("#MessageRule").val(RequestRule.Text);
  $("#MatchKey").val($.trim($("#TextMatchKey2").val()));
  $("#TextContent").val($("#Text2").val());
  if ($("#form").valid()) {
  $.ajax({
   url: "@Url.Action("PostData")",
   type: "Post",
  data: $("#form").serialize(),
  dataType: "json",
  success: function(data) {
   if (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
  larghezza: 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 (indice, dati) {
  var riga = $('#List31').datagrid('getSelected');
  if (riga != null)
  {
   $('#List3').datagrid({url:'@Url.Action("GetList")?messageRule='+RequestRule.Image+'&category='+riga.Category+'&matchKey='+riga.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: '关键字',
  larghezza: 130,
  sortable: true,
  formatore: function (valore, riga, indice) {
   if (row.Category == Category.Equal) {
   return "(完全匹配)" + value
   } else {
   return "(模糊匹配)" + value
   }
  }
  },
  {
  campo: 'CreateTime',
  titolo: 'Data di creazione',
  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',
  larghezza: SetGridWidthSub(340),
  methord: 'post',
  height: SetGridHeightSub(100),
  fitColumns: true,
  nomeDiOrdinamento: 'Sort',
  ordineDiOrdinamento: '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
   }
  }
  },
  {
  campo: 'ImgTextUrl',
  titolo: 'Immagine',
  larghezza: 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: '回复内容',
  larghezza: 180,
  sortable: true
  },
  {
  campo: 'Sort',
  titolo: 'Ordinamento',
  larghezza: 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({
  title: '@Resource.Create',
  width: 700,
  altezza: 550,
  iconCls: 'fa fa-plus'
  }).window('open');
 });
 $("#btnSava3").unbind().click(function () {
  se ($.trim($("#ImageTitle3").val()) == "") {
  $.messager.alert('@Resource.Tip', '标题必须填写!', 'warning');
  return;
  }
  if ($.trim($("#TextMatchKey3").val()) == "") {
  $.messager.alert('@Resource.Tip', '关键字必须填写!', 'warning');
  return;
  }
  if ($.trim($("#ImageUrl3").val()) == "") {
  $.messager.alert('@Resource.Tip', '图片必须上传!', 'warning');
  return;
  }
  //图文回复
  $("#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());
  if ($("#form").valid()) {
  $.ajax({
   url: "@Url.Action("PostData")",
   type: "Post",
  data: $("#form").serialize(),
  dataType: "json",
  success: function(data) {
   if (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({
  title: '@Resource.Create',
  width: 700,
  height: 500,
  iconCls: 'fa fa-plus'
  }).window('open');
 });
 $("#btnSava4").unbind().click(function () {
  if ($.trim($("#VoiceTitle4").val()) == "") {
  $.messager.alert('@Resource.Tip', '标题必须填写!', 'warning');
  return;
  }
  if ($.trim($("#TextMatchKey4").val()) == "") {
  $.messager.alert('@Resource.Tip', '关键字必须填写!', 'warning');
  return;
  }
  if ($.trim($("#VoiceUrl4").val()) == "") {
  $.messager.alert('@Resource.Tip', '必须上传语音!', 'warning');
  return;
  }
  //图文回复
  $("#MessageRule").val(RequestRule.Voice);
  $("#MatchKey").val($("#TextMatchKey4").val());
  $("#TextContent").val($("#VoiceTitle4").val());
  $("#MeidaUrl").val($("#VoiceUrl4").val());
  $("#Remark").val($("#VoiceContent4").val());
  if ($("#form").valid()) {
  $.ajax({
   url: "@Url.Action("PostData")",
   type: "Post",
  data: $("#form").serialize(),
  dataType: "json",
  success: function(data) {
   if (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({
  giustificato: true,
  larghezza: '100%',
  altezza: $(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;
  }
  }
 });
 // inizializzazione del primo etichetta
 initDefault();
 // impostazione automatica di altezza e larghezza
 $$(window).resize(function() {
  $('#tt').tabs({
  altezza:$(window).height() - 20
  });
  //$('#List2').datagrid('resize', {
  // larghezza: SetGridWidthSub(40),
  // altezza: 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="altezza: 45px; altezza-linea: 45px; larghezza: 100%; bordo-basso: 1px solid #e7eaec">
   <tr>
   <td style="larghezza: 100px;">
    Testo: @Html.SwitchButtonByEdit("swText0", false)
   </td>
   <td style="larghezza: 100px;">
    Testo e Immagine: @Html.SwitchButtonByEdit("swImage0", false)
   </td>
   <td style="larghezza: 100px;">
    Voce: @Html.SwitchButtonByEdit("swVoice0", false)
   </td>
   <td></td>
   <td style="larghezza: 300px;">
    <div class="colore-verde">Operazione attuale account WeChat: <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", "Conferma e Salva", 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", "Aggiungi Risposta", 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", "Conferma e Salva", ref perm, "Edit", false)
   </div>
   <table class="formtablenormal">
    <tr><th>标题: </th><td><input type="text" id="ImageTitle0" class="textbox" data-options="richiesto: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" accetta="audio/mpeg" id="FileUpload03" class="nascondi" nome="FileUpload03" onchange="Carica('SingleFile', 'VoiceUrl0', 'FileUpload03', '', '', '#form03');" />
        <span class="uploading">@Resource.Uploading</span>
        </form>
     </td></tr>
     <tr><th>Descrizione: </th><td><textarea id="VoiceContent0" style="larghezza: 335px; altezza: 300px;"></textarea></td></tr>
    </table>
   </div> 
  </div>
  <div title="[#2#]" >
  <table class="formtable" style="altezza: 45px; altezza-linea: 45px; larghezza: 100%; bordo-basso: 1px solid #e7eaec">
   <tr>
   <td style="larghezza: 100px;">
    Testo: @Html.SwitchButtonByEdit("swText1", false)
   </td>
   <td style="larghezza: 100px;">
    Immagine: @Html.SwitchButtonByEdit("swImage1", false)
   </td>
   <td style="larghezza: 100px;">
    Voce: @Html.SwitchButtonByEdit("swVoice1", false)
   </td>
   <td></td>
   <td style="larghezza: 300px;">
    <div class="colore-verde">Operazione attuale account WeChat: <span id="CurrentOfficalAccount">@ViewBag.CurrentOfficalAcount</span></div>
   </td>
   </tr>
  </table>
  <div id="div11" class="nascondi">
   <div class="mvctool bgb">
   @Html.ButtonStrumento("btnSava11", "fa fa-plus", "Invia e Salva", ref perm, "Modifica", false)
   </div>
   <textarea id="Text1" style="larghezza: 300px; altezza: 330px; margine: 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>Descrizione: </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", "Aggiungi risposta", ref perm, "Edit", true)
   @Html.ToolButton("btnEdit2", "fa fa-search", "Modifica", ref perm, "Edit", true)
   @Html.ToolButton("btnDelete2", "fa fa-search", "Elimina", ref perm, "Delete", false)
   <div class="rightdiv color-green">
   当前操作公众号: <span id="CurrentOfficalAccount">@ViewBag.CurrentOfficalAcount</span>
   </div>
  </div>
  <div id="modalwindow2"
   class="easyui-window"
   style="larghezza:600px; altezza:500px;" data-options="modal:true,closed: true,minimizable:false,shadow:false">
   <div class="mvctool bgb">
   @Html.ToolButton("btnSava2", "fa fa-search", "Conferma salvataggio", 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, "Corrispondenza vaga (contenuto include parole chiave) ", "Corrispondenza perfetta (contenuto corrisponde esattamente alle parole chiave)", "280")
    </td>
   </tr>
   <tr>
    <th>Contenuto: </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", "Aggiungi risposta", ref perm, "Edit", true)
   @Html.ToolButton("btnEdit3", "fa fa-search", "Modifica", ref perm, "Edit", true)
   @Html.ToolButton("btnDelete3", "fa fa-search", "Elimina", 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", "Salva", ref perm, "Edit", false)
   <div class="rightdiv color-green">
    当前操作公众号: <span id="CurrentOfficalAccount">@ViewBag.CurrentOfficalAcount</span>
   </div>
   </div>
   <table class="formtablenormal">
   <tr><th>Titolo: </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, "Corrispondenza vaga (contenuto include parole chiave) ", "Corrispondenza perfetta (contenuto corrisponde esattamente alle parole chiave)", "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>Contenuto: </th><td><textarea id="ImageContent3" style="larghezza: 300px; altezza: 80px;"></textarea></td></tr>
   <tr><th>Link: </th><td><input type="text" id="ImageLink3" /></td></tr>
   <tr><th>Ordinamento: </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", "Aggiungi risposta", ref perm, "Modifica", false)
   @Html.ToolButton("btnEdit4", "fa fa-search", "Modifica", ref perm, "Modifica", true)
   @Html.ToolButton("btnDelete4", "fa fa-search", "Elimina", ref perm, "Elimina", false)
   <div class="rightdiv color-green">
   当前操作公众号: <span id="CurrentOfficalAccount">@ViewBag.CurrentOfficalAcount</span>
   </div>
  </div>
  <div id="modalwindow4"
   class="easyui-window"
   style="larghezza:600px; altezza:500px;" data-options="modal:true,closed: true,minimizable:false,shadow:false">
   <div class="mvctool bgb">
   @Html.ToolButton("btnSava4", "fa fa-search", "Conferma salvataggio", ref perm, "Modifica", 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#]"
   style="padding:10px">
  </div>
  <div title="[#8#]"
   style="padding:10px">
  </div>*@
 </div>
 </div>

Use the front-end mind map to quickly understand the front-end code and apply it in practice. 

Summary 

Message management is a very skillful thing.

1. When there is no task reply, we should enable the default reply, otherwise the user will not get a response and lose the experience. 

2. The design of keywords is usually one link扣one link, with a guiding role.
For example:

Keywords: (I want) Reply: Press 1 to join and get a gift, press 2 to get 50 yuan directly.
Keywords: (1) Reply: Press 3 to get a free Tieguanyin tea, press 4 to get Pu'er tea.
Keywords: (3 or 4) Reply: Please reply your address, phone number and recipient.
In this way, we will obtain a complete dialogue between the system and the user, of course, we also need to process the user's final information.

This article has been organized into 'ASP.NET WeChat Development Tutorial Summary', welcome to learn and read.

For more content about the management system, please click on 'Management System Special Topic' to learn.

That's all for this article, I hope it will be helpful to everyone's learning, and I also hope everyone will support the呐喊 tutorial more.

Declaration: The content of this article is from the Internet, the copyright belongs to the original author, the content is contributed and uploaded by Internet users spontaneously, this website does not own the ownership, has not been manually edited, nor assumes relevant legal liability. If you find any content suspected of copyright infringement, please send an email to: notice#oldtoolbag.com (when sending an email, please replace # with @) for reporting, and provide relevant evidence. Once confirmed, this site will immediately delete the suspected infringing content.

Ti potrebbe interessare