You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DSWMS/Vue.Net/VOL.Core/BaseProvider/DictionaryComponent/DictionaryViewComponent.cs

63 lines
2.5 KiB
C#

2 years ago
using VOL.Core.Dapper;
using VOL.Core.DBManager;
using VOL.Core.EFDbContext;
using VOL.Core.Extensions;
using VOL.Entity.DomainModels;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
using System;
using System.Data;
//using System.Data.SqlClient;
using Microsoft.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ConvertHelper;
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");
}
}
}