_QueryModal.cshtml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. @using System.Linq;
  2. @using VberAdmin.Web.Models.Modals
  3. @using VberZero.Tools.StringModel
  4. @model VmQueryModal
  5. @{
  6. string modalId = Model?.ModalId ?? "";
  7. string submit = Model?.SubmitEventName ?? "";
  8. string dbClick = Model?.ItemDbClickEventName ?? "";
  9. string width = Model?.ModalWidth > 0 ? "min-width:" + Model.ModalWidth + "px" : "";
  10. VmQueryTreeSearch treeSearch = Model?.VmQueryTreeSearch;
  11. string treeField = "", treeSelectUrl = "", treeSelectFiledName = "";
  12. int treeFType = 0; int treeEType = 0;
  13. if (treeSearch != null)
  14. {
  15. treeField = treeSearch.Field;
  16. treeFType = treeSearch.FType;
  17. treeEType = treeSearch.EType;
  18. treeSelectUrl = treeSearch.SelectUrl;
  19. treeSelectFiledName = treeSearch.SelectFieldName;
  20. }
  21. string searchBindFunc = Model?.SearchBindFun;
  22. }
  23. <!-- QUERY-MODAL @(Model?.ModalId) START-->
  24. <style>
  25. .query-modal.KeyWords {
  26. text-decoration: none;
  27. }
  28. </style>
  29. <section>
  30. <div class="modal fade query-modal" id="@(modalId)" role="dialog" tabindex="-1" aria-hidden="true"
  31. data-tree="@(treeSearch==null?"false":"true")" data-tree-select-filed="@(treeSelectFiledName)" data-tree-url="@(treeSelectUrl)" data-tree-field="@(treeField):@(treeFType):@(treeEType)" data-search-bind-func="@(searchBindFunc)">
  32. <div class="modal-dialog modal-lg" role="document" style="@(width)">
  33. <div class="modal-content">
  34. @await Html.PartialAsync("Modals/_Header", new VmModalHeader(Model?.ModalName))
  35. <div class="modal-body scroll-y p-3">
  36. <div id="tree-box_@(modalId)" class="row">
  37. @{
  38. string colClass = "col-md-12";
  39. if (treeSearch != null)
  40. {
  41. colClass = "col-md-9";
  42. <div class="col-md-3" style="padding-right: 0;">
  43. <div style="height: 100%; padding: 5px 0;">
  44. <div id="treeView_@(modalId)" class="vb-treeView"></div>
  45. </div>
  46. </div>
  47. }
  48. }
  49. <div class="@colClass" style="">
  50. <div id="@(modalId)_table_box" class=" table-box vb-bootstrap-table fs-6 p-1 text-gray-700">
  51. <div class="d-flex flex-stack ">
  52. @if (Model.Search != null)
  53. {
  54. @await Html.PartialAsync("_Search", Model.Search)
  55. }
  56. </div>
  57. <table id="table_query_@(modalId)" class="table text-start table-striped table-row-dashed text-gray-700 fs-6 gx-3 gy-2"
  58. data-url="@Model.QueryUrl"
  59. data-server-side="true"
  60. data-row-id="@(Model.RowId)"
  61. data-method="post"
  62. data-length-menu="[10]"
  63. data-page-select="@(Model.PageSelect)"
  64. data-single-select="@(Model.SingleSelect)"
  65. data-click-to-select="true"
  66. data-processing="true"
  67. data-paging="true">
  68. <thead>
  69. <tr class="text-start text-gray-800 fw-bolder fs-4 text-uppercase gx-3 gy-3">
  70. @if (Model.QueryItems != null && Model.QueryItems.Any())
  71. {
  72. <th class="w-10px pe-2" data-check-box="true" data-sortable="false">
  73. @if (!Model.IsSingleSelect)
  74. {
  75. //data-kt-check="true" data-kt-check-target="#@(Model.TableId) .form-check-input"
  76. <div class="form-check form-check-sm form-check-custom form-check-solid me-3">
  77. <input class="form-check-input" type="checkbox" value="1"/>
  78. </div>
  79. }
  80. </th>
  81. foreach (var item in Model.QueryItems)
  82. {
  83. if (item.IsFieldHidden)
  84. {
  85. continue;
  86. }
  87. <th data-field="@(item.FiledName)" data-class-name="@(item.ClassName)" @(Html.Raw(item.Sort)) @(Html.Raw(item.FormatterStr)) @(Html.Raw(item.WidthStr))>@(item.DisplayName)</th>
  88. }
  89. }
  90. </tr>
  91. </thead>
  92. </table>
  93. </div>
  94. </div>
  95. </div>
  96. </div>
  97. <div class="modal-footer">
  98. <button type="button" class="btn btn-sm btn-light me-5" style="min-width: 100px;" onclick="Clear_@(modalId)()">@(L("Clear"))</button>
  99. <button type="button" class="btn btn-sm btn-primary" style="min-width: 100px;" onclick="Save_@(modalId)()">@(L("OK"))</button>
  100. </div>
  101. </div>
  102. </div>
  103. </div>
  104. </section>
  105. <script>
  106. var $@(modalId)_table = $("#table_query_@(modalId)"), _searchKeyWord_@(modalId) = "";
  107. function @(modalId)Refresh(){
  108. $@(modalId)_table.VbTable('refresh', true);
  109. }
  110. function @(modalId)Search() {
  111. @if (treeField.NotEmpty())
  112. {
  113. <text>
  114. $('#treeView_@modalId').VbTreeView({
  115. url: '@Html.Raw(treeSelectUrl)',
  116. onNodeSelected: function(e, d) {
  117. _searchKeyWord_@(modalId) = d["@Html.Raw(treeSelectFiledName)"];
  118. debug_log("_searchKeyWord_", _searchKeyWord_@(modalId));
  119. $@(modalId)_table.VbTable('refresh', true);
  120. },
  121. onNodeUnselected: function () {
  122. _searchKeyWord_@(modalId) = "";
  123. $@(modalId)_table.VbTable('refresh', true);
  124. },
  125. table:$@(modalId)_table
  126. });
  127. </text>
  128. }
  129. LoadTable({
  130. table: $@(modalId)_table,
  131. searchForm:'@(modalId)_search',
  132. onDblClickRow: DbClickRow_@(modalId),
  133. searchFun: SearchList_@(modalId)
  134. });
  135. }
  136. function SearchList_@(modalId)(searchList) {
  137. if (_searchKeyWord_@(modalId)) {
  138. searchList.push({
  139. KeyWords: _searchKeyWord_@(modalId),
  140. KeyField: "@(treeField)",
  141. FieldType: "@(treeFType)",
  142. ExpType: "@(treeEType)"
  143. });
  144. }
  145. @if (searchBindFunc.NotEmpty()) {
  146. <text>
  147. let searchBindFunc = '@(searchBindFunc)';
  148. if ( window[searchBindFunc] && typeof window[searchBindFunc] == "function") {
  149. window[searchBindFunc].call();
  150. }
  151. </text>
  152. }
  153. }
  154. function Clear_@(modalId)() {
  155. Save_@(modalId)(false, true);
  156. }
  157. function DbClickRow_@(modalId)(row) {
  158. row = row || {};
  159. @if(!Model.IsSingleSelect){
  160. if (dbClick.Empty())
  161. {
  162. <text>
  163. Submit_@(modalId)(row);
  164. </text>
  165. }
  166. else
  167. {
  168. <text>
  169. @(dbClick)(row);
  170. </text>
  171. }
  172. }
  173. }
  174. function Save_@(modalId)(data, isClear) {
  175. debug_log('@(modalId)submit', isClear);
  176. @if (string.IsNullOrEmpty(submit))
  177. {
  178. <text>
  179. let $target, value = '', rows = data || window.GetSelections($@(modalId)_table), name = '';
  180. if (!rows|| !rows.length) {
  181. abp.message.warn(abp.localization.localize("ChooseOneToOp"));
  182. }
  183. </text>
  184. int i = 0;
  185. foreach (var tFields in Model.TargetFields)
  186. {
  187. @if (Model.IsSingleSelect) {
  188. <text>
  189. if (!isClear) {
  190. let row = Array.isArray(rows) ? rows[0] : rows;
  191. value = row && row['@Html.Raw(Model.OriginFields[i])'] ? row['@Html.Raw(Model.OriginFields[i])'] : "";
  192. name = row && row['@Html.Raw(Model.AjaxSelectNameField)'] ? row['@Html.Raw(Model.AjaxSelectNameField)'] : "";
  193. }
  194. </text>
  195. }
  196. else
  197. {
  198. <text>
  199. if (!isClear) {
  200. value = "";
  201. rows.forEach(function(v) {
  202. value += (value ? "" : ",") + v && v['@(Model.OriginFields[i])'] ? v['@(Model.OriginFields[i])'] : "";
  203. });
  204. }
  205. </text>
  206. <text>
  207. debug_log('@modalId',value,`@(string.Join(",", tFields))`)
  208. </text>
  209. }
  210. foreach (var targetFiled in tFields)
  211. {
  212. <text>
  213. $target = $(window.queryModalTarget + " @Html.Raw(targetFiled)");
  214. if ($target.length) {
  215. $target.val(value);
  216. if ($target.is('select')) {
  217. if ($target.hasClass('ajax-select') && !isClear) {
  218. window.ChangAjaxSelectValue($target, value, name);
  219. } else {
  220. $target.trigger('change');
  221. }
  222. }
  223. }
  224. </text>
  225. }
  226. i++;
  227. }
  228. }
  229. else
  230. {
  231. <text>
  232. submit(data,isClear);
  233. </text>
  234. }
  235. $("#@modalId").modal('hide');
  236. }
  237. </script>
  238. <!-- QUERY-MODAL @(Model.ModalId) END-->
  239. @*
  240. @if (string.IsNullOrEmpty(submit))
  241. {
  242. <text>
  243. let value = '', rows = data || $@(modalId)_table.VbTable("getSelections"), name = '';
  244. if (!rows|| !rows.length) {
  245. abp.message.warn(abp.localization.localize("ChooseOneToOp"));
  246. }
  247. </text>
  248. int i = 0;
  249. foreach (var tFields in Model.TargetFields)
  250. {
  251. @if (Model.IsSingleSelect) {
  252. <text>
  253. if (!isClear) {
  254. let row = Array.isArray(rows) ? rows[0] : rows;
  255. value = row && row['@Html.Raw(Model.OriginFields[i])'] ? row['@Html.Raw(Model.OriginFields[i])'] : "";
  256. name = row && row['@Html.Raw(Model.AjaxSelectNameField)'] ? row['@Html.Raw(Model.AjaxSelectNameField)'] : "";
  257. }
  258. </text>
  259. }
  260. else
  261. {
  262. <text>
  263. if (!isClear) {
  264. value = "";
  265. rows.forEach(function(v) {
  266. value += (value ? "" : ",") + v && v['@(Model.OriginFields[i])'] ? v['@(Model.OriginFields[i])'] : "";
  267. });
  268. }
  269. </text>
  270. }
  271. foreach (var targetFiled in tFields)
  272. {
  273. <text>
  274. let $target = $(window.queryModalTarget + ' @Html.Raw(targetFiled)');
  275. if ($target.length) {
  276. $target.val(value);
  277. if ($target.is('select')) {
  278. if ($target.hasClass('ajax-select') && !isClear) {
  279. window.ChangAjaxSelectValue($target, value, name);
  280. } else {
  281. $target.trigger('change');
  282. }
  283. }
  284. }
  285. </text>
  286. }
  287. i++;
  288. }
  289. }
  290. else
  291. {
  292. <text>
  293. submit(data.isClear);
  294. </text>
  295. }
  296. *@