54 lines
2.4 KiB
C#
54 lines
2.4 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
||
using Microsoft.EntityFrameworkCore;
|
||
using System;
|
||
using System.Data;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
using VOL.Core.DBManager;
|
||
using VOL.Core.EFDbContext;
|
||
using VOL.Core.Extensions;
|
||
using VOL.Entity.DomainModels;
|
||
|
||
namespace VOL.Core.BaseProvider.DictionaryComponent
|
||
{
|
||
/// <summary>
|
||
/// 组件视图,参照:https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components?view=aspnetcore-2.1
|
||
/// 与Controller命名一样必须以ViewComponent结尾
|
||
/// </summary>
|
||
public class DictionaryViewComponent : ViewComponent
|
||
{
|
||
public async Task<IViewComponentResult> InvokeAsync(string dropDownIds)
|
||
{
|
||
if (string.IsNullOrEmpty(dropDownIds))
|
||
return null;
|
||
|
||
string[] dicNos = dropDownIds.Split(',');
|
||
StringBuilder stringBuilder = new StringBuilder();
|
||
VOLContext context = DBServerProvider.GetEFDbContext();
|
||
var dicData = await (from d in context.Set<Sys_Dictionary>()
|
||
join list in context.Set<Sys_DictionaryList>()
|
||
on d.Dic_ID equals list.Dic_ID
|
||
into t
|
||
from list in t.DefaultIfEmpty()
|
||
where dicNos.Contains(d.DicNo)
|
||
select new { list.DicValue, list.DicName, d.Config, d.DbSql, list.OrderNo, d.DicNo }).ToListAsync();
|
||
|
||
foreach (var item in dicData.GroupBy(x => x.DicNo))
|
||
{
|
||
stringBuilder.AppendLine($" var optionConfig{item.Key} = {item.Select(x => x.Config).FirstOrDefault()}");
|
||
|
||
string dbSql = item.Select(s => s.DbSql).FirstOrDefault();
|
||
|
||
stringBuilder.AppendLine($@" var dataSource{item.Key} = {(!string.IsNullOrEmpty(dbSql)
|
||
? DBServerProvider.GetSqlDapper().QueryList<object>(dbSql, null).Serialize()
|
||
: item.OrderByDescending(o => o.OrderNo).
|
||
Select(s => new { s.DicName, s.DicValue }).ToList()
|
||
.Serialize())}.convertToValueText(optionConfig{item.Key})");
|
||
stringBuilder.AppendLine($" optionConfig{item.Key}.data = dataSource{item.Key};");
|
||
}
|
||
ViewBag.Dic = stringBuilder.ToString();
|
||
return View("~/Views/Shared/Dictionary.cshtml");
|
||
}
|
||
}
|
||
} |