VmInputGroup.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. using VberAdmin.Web.Models.Modals;
  2. using VberZero.Tools.StringModel;
  3. namespace VberAdmin.Web.Models.Input;
  4. public class VmInputGroup
  5. {
  6. public VmInputGroup()
  7. {
  8. IsAverage = true;
  9. SortId = 0;
  10. HiddenInputs = new List<VmInputBase>();
  11. //Groups = new Dictionary<int, VmInputGroup>();
  12. Inputs = new Dictionary<int, VmInputBase>();
  13. }
  14. //private VmInputGroup(bool isChild) : this()
  15. //{
  16. // IsChild = isChild;
  17. //}
  18. //public VmInputGroup Parent { get; private set; }
  19. //public bool IsChild { get; private set; }
  20. //public Dictionary<int, VmInputGroup> Groups { get; set; }
  21. public VmModal Modal { get; set; }
  22. public List<VmInputBase> HiddenInputs { get; }
  23. public Dictionary<int, VmInputBase> Inputs { get; set; }
  24. public int SortId { get; set; }
  25. //public int Count => Groups.Count + Inputs.Count;
  26. public int Count => Inputs.Count;
  27. private string _layoutClass;
  28. public string LayoutClass
  29. {
  30. get
  31. {
  32. if (_layoutClass.Empty())
  33. {
  34. return AutoCalculateClass();
  35. }
  36. return _layoutClass;
  37. }
  38. set => _layoutClass = value;
  39. }
  40. /// <summary>
  41. /// Bootstrap 的标准断点 (sm, md, lg, xl) 默认空
  42. /// </summary>
  43. public string BreakPoint { get; set; }
  44. /// <summary>
  45. /// 每行的input个数 (2,3,4,6),用于自动计算class 默认2
  46. /// </summary>
  47. public int RowCount { get; set; } = 2;
  48. /// <summary>
  49. /// 平均分布(个数少时推荐) 大于<see cref="MaxRowCount"/>时 使用MaxRowCount
  50. /// </summary>
  51. public bool IsAverage { get; set; }
  52. /// <summary>
  53. /// 2-4
  54. /// </summary>
  55. public int MaxRowCount { get; set; } = 3;
  56. private string AutoCalculateClass()
  57. {
  58. if (Inputs.Count <= 0)
  59. {
  60. return "";
  61. }
  62. int count;
  63. if (IsAverage)
  64. {
  65. var average = Count > MaxRowCount ? MaxRowCount : Count;
  66. count = 12 / average;
  67. }
  68. else
  69. {
  70. count = 12 / (RowCount > 0 ? RowCount : 2);
  71. }
  72. return $"col-{(BreakPoint.Empty() ? "" : $"{BreakPoint}-")}{count}";
  73. }
  74. public VmInputGroup WithBreakPoint(string breakPoint)
  75. {
  76. BreakPoint = breakPoint;
  77. return this;
  78. }
  79. public VmInputGroup WithLayoutClass(string @class)
  80. {
  81. LayoutClass = @class;
  82. return this;
  83. }
  84. public VmInputGroup WithAverage(int maxRowCount = 3)
  85. {
  86. IsAverage = true;
  87. MaxRowCount = maxRowCount;
  88. return this;
  89. }
  90. public VmInputGroup WithNotAverage(int rowCount = 2)
  91. {
  92. IsAverage = false;
  93. RowCount = rowCount;
  94. return this;
  95. }
  96. //public VmInputGroup AddGroup(VmInputGroup group)
  97. //{
  98. // group.IsChild = true;
  99. // group.Parent = this;
  100. // Groups.Add(SortId, group);
  101. // SortId++;
  102. // return this;
  103. //}
  104. public VmInputGroup AddInput(VmInputBase input)
  105. {
  106. if (input.IsHidden)
  107. {
  108. HiddenInputs.Add(input);
  109. }
  110. else
  111. {
  112. Inputs.Add(SortId, input);
  113. SortId++;
  114. }
  115. return this;
  116. }
  117. public VmInputGroup AddInputs(List<VmInputBase> inputs)
  118. {
  119. foreach (var input in inputs)
  120. {
  121. AddInput(input);
  122. }
  123. return this;
  124. }
  125. //public VmInputGroup GetGroup(int id)
  126. //{
  127. // if (Groups.ContainsKey(id))
  128. // {
  129. // var group = Groups[id];
  130. // group.Modal = Modal;
  131. // return group;
  132. // }
  133. // return null;
  134. //}
  135. public VmInputBase GetInput(int id)
  136. {
  137. if (Inputs.ContainsKey(id))
  138. {
  139. var input = Inputs[id];
  140. input.ModalId = Modal.Id;
  141. return input;
  142. }
  143. return null;
  144. }
  145. //private VmInputBase SetInputFormId(VmInputBase input)
  146. //{
  147. // input.FormId = Modal.FormId;
  148. // return input;
  149. //}
  150. }