Files
tnb.server/visualdev/Tnb.Vmodel/Entities/VmodelProp.cs

231 lines
5.3 KiB
C#

/////////////////////////////////////////////////////////////////////////////////
// 宁波拓通e智造平台 ToTong Next Builder //
// https://git.tuotong-tech.com/tnb/tnb.server //
/////////////////////////////////////////////////////////////////////////////////
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Tnb.DataAccess;
using Yitter.IdGenerator;
namespace Tnb.VmodelEngine;
/// <summary>
/// 视图模型属性
/// </summary>
public class VmProp
{
/// <summary>
/// 属性代码
/// </summary>
public string code { get; set; } = string.Empty;
/// <summary>
/// 显示名称
/// </summary>
public string name { get; set; } = string.Empty;
}
/// <summary>
/// 字段属性
/// </summary>
public class VmDbProp : VmProp
{
#region Properties
/// <summary>
/// 字段名称
/// </summary>
public string field { get; set; } = string.Empty;
/// <summary>
/// 数据类型
/// </summary>
public string dataType { get; set; } = "varchar";
/// <summary>
/// 数据类型
/// </summary>
public string? csType { get; set; }
/// <summary>
/// 长度
/// </summary>
public int length { get; set; }
/// <summary>
/// 精度
/// </summary>
public int digit { get; set; }
/// <summary>
/// 排序
/// </summary>
public int ordinal { get; set; }
/// <summary>
/// 非空
/// </summary>
public bool required { get; set; }
/// <summary>
/// 是否主键
/// </summary>
public bool pkey { get; set; }
/// <summary>
/// 是否模糊搜索
/// </summary>
public bool fuzzy { get; set; }
/// <summary>
/// 默认值
/// </summary>
public string? defValue { get; set; }
/// <summary>
/// 描述
/// </summary>
public string? descrip { get; set; }
#endregion
/// <summary>
/// 获取默认值
/// </summary>
/// <returns></returns>
public object? GetDefaultValue()
{
object? val = null;
if (string.IsNullOrEmpty(defValue))
{
val = defValue switch
{
"@@snowid" => YitIdHelper.NextId().ToString(),
"@@now" => DateTime.Now,
"@@userid" => YitIdHelper.NextId().ToString(),
"@@orgid" => YitIdHelper.NextId().ToString(),
_ => null
};
}
else
{
val = csType switch
{
"string" => string.Empty,
"short" or "int" or "long" => 0,
"float" or "double" or "decimal" => 0f,
"DateTime" => DateTime.Now,
_ => null
};
}
return val;
}
/// <summary>
/// 获取默认宽度
/// </summary>
/// <returns></returns>
public string GetDefaultWidth()
{
return csType switch
{
"string" => "\"width\": \"auto\"",
"int" or "short" or "long" => "\"width\": 80",
"DateTime" => "\"width\": 150",
_ => ""
};
}
/// <summary>
/// 获取默认组件
/// </summary>
/// <returns></returns>
public CompOption GetDefaultComp()
{
CompOption comp = new CompOption();
if (pkey)
{
comp.attr.Add("disabled", true);
return comp;
}
switch (csType)
{
case "string":
comp.attr.Add("clearable", true);
comp.attr.Add("maxlength", length);
comp.attr.Add("showWordLimit", true);
break;
case "int":
case "short":
case "long":
comp.type = "el-input-number";
break;
case "DateTime":
comp.type = "el-date-picker";
break;
};
return comp;
}
}
/// <summary>
/// 导航属性
/// </summary>
public class VmNavProp : VmProp
{
/// <summary>
/// 导航属性模型id
/// </summary>
public string vmid { get; set; } = string.Empty;
/// <summary>
/// 导航关联类型
/// </summary>
public eNavigateType navType { get; set; }
/// <summary>
/// 源表字段
/// </summary>
public string refCode { get; set; } = VmSelectProp.MAIN_ALIES;
/// <summary>
/// 被引用字段
/// </summary>
public string refField { get; set; } = string.Empty;
/// <summary>
/// 源表字段
/// </summary>
public string fkField { get; set; } = string.Empty;
///// <summary>
///// 关联表表名
///// </summary>
//[JsonIgnore]
//public string refTable { get; set; } = string.Empty;
///// <summary>
///// 被引用表(中间表)
///// </summary>
//[JsonIgnore]
//public string? midTable { get; set; }
[JsonIgnore]
public Vmodel? naviModel { get; set; }
}
public class VmCalProp : VmProp
{
public string calculate { get; set; } = string.Empty;
}
public class DictOption
{
public string dictTypeId { get; set; } = string.Empty;
public string refField { get; set; } = "id";
}
public class CompOption
{
public string type { get; set; } = "el-input";
public JObject attr { get; set; } = new JObject();
}