Standards.cshtml 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460
  1. @using ShwasherSys.Authorization.Permissions
  2. @using ShwasherSys.Models.Layout
  3. @using ShwasherSys.Models.Modal
  4. @using ShwasherSys.Views.Shared.New.Table
  5. @{
  6. /**/
  7. ViewBag.ActiveMenu = PermissionNames.PagesProductInfoStandards; //The menu item will be active for this page.
  8. ViewBag.Title = "标准管理";
  9. // List<SelectListItem> classification = ViewBag.Classification;
  10. var searchForm = new SearchFormViewModal(new List<SearchItem>()
  11. {
  12. new SearchItem("standardName","标准规格"),
  13. new SearchItem("standardFullName","标准名称"),
  14. new SearchItem("innerDiameter","内径",FiledType.S,ExpType.Equal),
  15. //new SearchItem("innerDiameter2","内径(最大)",FiledType.S,ExpType.Equal),
  16. new SearchItem("outDiameter","外径",FiledType.S,ExpType.Equal),
  17. //new SearchItem("outDiameter2","外径(最大)",FiledType.S,ExpType.Equal),
  18. }, false);
  19. var tableDetail = new TableViewModel("/api/services/app/Standards/GetDetail", null, null, "tableDetail")
  20. .SetFields(new List<FieldItem>()
  21. {
  22. new FieldItem("standardName", "名称"),
  23. new FieldItem("specs", "规格"),
  24. new FieldItem("innerDiameter", "内径",formatter:"InnerDiameterFormatter"),
  25. new FieldItem("outDiameter", "外径",formatter:"OutDiameterFormatter"),
  26. new FieldItem("thickness", "厚度",formatter:"ThicknessFormatter"),
  27. new FieldItem("height", "高度",formatter:"HeightFormatter"),
  28. new FieldItem("innerChamfer","内倒角",formatter:"InnerChamferFormatter"),
  29. new FieldItem("outChamfer", "外倒角",formatter:"OutChamferFormatter"),
  30. new FieldItem("thousandWeigh", "千件重"),
  31. }).SetPageArray(25);
  32. }
  33. @section css{
  34. <style>
  35. .drawing {
  36. width: 500px;
  37. height: 200px;
  38. display: flex;
  39. flex-flow: row nowrap;
  40. justify-content: center;
  41. align-items: center;
  42. }
  43. #moreInfo {
  44. margin: 15px 5px;
  45. height: 230px;
  46. }
  47. .catalogInfo table {
  48. border-collapse: separate;
  49. border-spacing: 1px;
  50. }
  51. .catalogInfo tr td {
  52. border: 1px solid #ccc;
  53. }
  54. .catalogInfo tr td:nth-child(1) {
  55. background: #ccc;
  56. text-align: right;
  57. }
  58. .infovalue {
  59. width: 250px;
  60. }
  61. .infoPic {
  62. width: 800px;
  63. height: 100%;
  64. /* display: flex;
  65. justify-content: center;
  66. align-items: center;*/
  67. overflow-x: auto;
  68. overflow-y: hidden;
  69. white-space: nowrap;
  70. }
  71. </style>
  72. }
  73. <div class="table-box mr-4 iwb-bootstrap-table" id="table-box-table">
  74. <input type="hidden" id="IsLock" value="N" />
  75. @Html.Action("ToolMenu", "Layout", new { pageName = ViewBag.ActiveMenu ,searchForm})
  76. <table id="table"
  77. data-url="/api/services/app/Standards/GetDetailView"
  78. data-striped="true" data-id-field="id" data-unique-id="id"
  79. data-method="post"
  80. data-side-pagination="server"
  81. data-content-type="application/x-www-form-urlencoded; charset=UTF-8"
  82. data-cache="false"
  83. data-pagination="true" data-page-size="30" data-page-number="1" data-page-list="[30,50,100,200]" data-pagination-detail-h-align="right" data-pagination-h-align="left"
  84. data-query-params="QueryParams"
  85. data-response-handler="ResponseHandler"
  86. data-click-to-select="true"
  87. data-single-select="true">
  88. <thead>
  89. <tr class="row" id="header">
  90. <th data-field="state" data-checkbox="true"></th>
  91. @*<th data-align="center" data-field="standardAbbr">简写</th>*@
  92. @*<th data-align="center" data-field="standardAbbrName">标准简称</th>*@
  93. <th data-align="center" data-field="standardFullName">标准完整名称</th>
  94. <th data-align="center" data-field="standardName">标准规格</th>
  95. @*<th data-align="center" data-field="rigidity">硬度</th>
  96. <th data-align="center" data-field="param">参数</th>
  97. <th data-align="center" data-field="drawing" data-formatter="DrawingFormatter">图纸</th>
  98. <th data-align="center" data-field="" data-formatter="ActionFormatter">查看详情</th>*@
  99. <th data-align="center" data-field="specs">规格</th>
  100. <th data-align="center" data-field="innerDiameter" data-formatter="InnerDiameterFormatter">内径</th>
  101. <th data-align="center" data-field="outDiameter" data-formatter="OutDiameterFormatter">外径</th>
  102. <th data-align="center" data-field="thickness" data-formatter="ThicknessFormatter">厚度</th>
  103. <th data-align="center" data-field="height" data-formatter="HeightFormatter">高度</th>
  104. <th data-align="center" data-field="innerChamfer" data-formatter="InnerChamferFormatter">内倒角</th>
  105. <th data-align="center" data-field="outChamfer" data-formatter="OutChamferFormatter">外倒角</th>
  106. <th data-align="center" data-field="thousandWeigh" >千件重</th>
  107. </tr>
  108. </thead>
  109. </table>
  110. </div>
  111. <div class="box box-primary direct-chat direct-chat-primary" id="moreInfo">
  112. <div class="box-header with-border">
  113. <h3 class="box-title">规格详情</h3>
  114. <div class="box-tools pull-right">
  115. <button type="button" class="btn btn-box-tool" onclick="moreHide()"><i class="iconfont icon-close"></i></button>
  116. </div>
  117. </div>
  118. <!-- /.box-header -->
  119. <div class="box-body catalogInfo" style="">
  120. </div>
  121. </div>
  122. @section modal{
  123. }
  124. @section scripts
  125. {
  126. <script type="text/javascript">
  127. var $table_height = $('body').height() - 230;
  128. var preHeight;
  129. $(function() {
  130. //show完毕前执行
  131. LoadTable(null,{
  132. onCheck: f_OnCheck,
  133. onUncheck: f_OnUncheck,
  134. onLoadSuccess: f_OnLoadSuccess
  135. });
  136. var funs = window.funs || { none: function() { console.log("No type"); } };
  137. funs["btnUpdate"] = function() { BtnUpdate({ readonly: "standardName" }); };
  138. //$("#Tool1").append(
  139. // ` <button type="button" class="btn btn-default" onclick="importData()">
  140. // 导入数据
  141. // </button>
  142. // `);
  143. $("#Tool1 button").hide();
  144. //initQueryTable();
  145. let changeHeight = function (bEle, aEle, mouseMoveAreaEle) {
  146. $("#table").bootstrapTable('resetView', { height: bEle.height() - 35 });
  147. preHeight = bEle.height() - 35;
  148. //$table.bootstrapTable('resetView', { height: bEle.height() - 35 });
  149. //$tableOrderItem.bootstrapTable('resetView', { height: aEle.height()-50 });
  150. }
  151. $("#table-box-table").SeparateBar({ move2Dom: "moreInfo", moveEvent: changeHeight });
  152. moreHide();
  153. });
  154. var checkStandardId;
  155. function moreHide() {
  156. // preHeight = $table_height;
  157. $("#table").bootstrapTable('resetView', { height: $table_height});
  158. $("#moreInfo").hide();
  159. $("#table-box-table").SeparateBar('isShow', false);
  160. }
  161. function moreShow(data) {
  162. abp.ajax({
  163. url: `/api/services/app/Standards/GetCatalog?id=${checkStandardId}`,
  164. async: true,
  165. type: "Post",
  166. contentType: 'application/json',
  167. isValidate: false,
  168. dataType: "json",
  169. success: function (res) {
  170. $(".catalogInfo").html(formatterMore(res,data));
  171. $("#table").bootstrapTable('resetView', { height: $table_height - 200 });
  172. $("#moreInfo").show();
  173. $("#table-box-table").SeparateBar('isShow', true);
  174. }
  175. });
  176. }
  177. function formatterMore(row,data) {
  178. /* <img style="width:100%;height:100%;" src="${queryFilePath('Certificate.EmployeeNo', row.employeeNo)}" />*/
  179. let img='';
  180. if (row.drawing) {
  181. let arrv = row.drawing.split('[>>]');
  182. arrv.forEach(function (value, i) {
  183. img += `<img style="width:400px;height:150px" src="${value}" />`;
  184. });
  185. }
  186. var info = ` <table>
  187. <tr>
  188. <td>简写:</td>
  189. <td class="infovalue">${row.standardAbbr}</td>
  190. <td rowspan="5" class="infoPic">${img}</td>
  191. </tr>
  192. <tr>
  193. <td>标准规格:</td>
  194. <td class="infovalue">${data.standardName}</td>
  195. </tr>
  196. <tr>
  197. <td>标准简称:</td>
  198. <td class="infovalue">${row.standardAbbrName}</td>
  199. </tr>
  200. <tr>
  201. <td>硬度:</td>
  202. <td>${row.rigidity ? row.rigidity : ""}</td>
  203. </tr>
  204. <tr>
  205. <td>参数:</td>
  206. <td>${ row.param ? row.param:""}</td>
  207. </tr>
  208. </table>`;
  209. return info;
  210. }
  211. // function initQueryTable() {
  212. //$tableDetail = LoadTable1(
  213. // {
  214. // table: $("#tableDetail"),
  215. // height: 560,
  216. // //isPage: false,
  217. // //modal: "modalItem",
  218. // //searchForm: "itemSearch",
  219. // searchValidate: false,
  220. // searchList: tmpSearch,
  221. // onlySearchList: true
  222. // });
  223. // }
  224. // function LoadTable1(option) {
  225. // if (!option) {
  226. // option = { table: "table" };
  227. // }
  228. // option.table = option.table ? option.table : "table";
  229. // var $table = typeof option.table === 'string' ? $('#' + option.table) : $(option.table);
  230. // if ($table.length < 1) {
  231. // console.log('没有发现表格:', option.table);
  232. // }
  233. // $table.iwbTable(option);
  234. // return $table;
  235. // }
  236. function importData() {
  237. abp.ajax({
  238. url: '/api/services/app/Standards/ImportData',
  239. async: true,
  240. type: "Post",
  241. contentType: 'application/json',
  242. isValidate: false,
  243. dataType: "json",
  244. success: function(res) {
  245. RefreshTable();
  246. }
  247. });
  248. }
  249. function f_OnCheck(row, ele) {
  250. console.table(row)
  251. checkStandardId = row.standardId;
  252. moreShow(row);
  253. }
  254. function f_OnUncheck(row, ele) {
  255. moreHide();
  256. }
  257. function f_OnLoadSuccess(data, table) {
  258. var $table = config.table;
  259. if (table) {
  260. if (typeof (table) === "string") {
  261. $table = $("#" + table);
  262. } else {
  263. $table = $(table);
  264. }
  265. }
  266. $table.find(".bs-checkbox").find("input").addClass("filled-in").after("<label></label");
  267. $table.find("thead th.bs-checkbox").off("click.checkOnTable").on(
  268. "click.checkOnTable",
  269. function () {
  270. $(this).find("input").click();
  271. });
  272. _isSearching = false;
  273. abp.ui.clearBusy();
  274. setTimeout(function () {
  275. var alldata = $("#table").bootstrapTable('getData');
  276. if (alldata.length > 0) {
  277. $("#table").bootstrapTable('check', 0);
  278. } else {
  279. moreHide();
  280. }
  281. },
  282. 500);
  283. }
  284. </script>
  285. <script>
  286. var $tableDetail;
  287. var tmpSearch = [
  288. { KeyWords: "0", KeyField: "StandardId", FieldType: "1", ExpType: "0" }
  289. ];
  290. function InnerDiameterFormatter(v, r) {
  291. let v1 = r.innerDiameter1;
  292. let v2 = r.innerDiameter2;
  293. if (v1 && v2) {
  294. return v1 + '~' + v2;
  295. }
  296. if (v1) {
  297. return v1;
  298. }
  299. return '';
  300. }
  301. function OutDiameterFormatter(v, r) {
  302. let v1 = r.outDiameter1;
  303. let v2 = r.outDiameter2;
  304. if (v1 && v2) {
  305. return v1 + '~' + v2;
  306. }
  307. if (v1) {
  308. return v1;
  309. }
  310. return '';
  311. }
  312. function ThicknessFormatter(v, r) {
  313. let v1 = r.thickness1;
  314. let v2 = r.thickness2;
  315. if (v1 && v2) {
  316. return v1 + '~' + v2;
  317. }
  318. if (v1) {
  319. return v1;
  320. }
  321. return '';
  322. }
  323. function HeightFormatter(v, r) {
  324. let v1 = r.height1;
  325. let v2 = r.height2;
  326. if (v1 && v2) {
  327. return v1 + '~' + v2;
  328. }
  329. if (v1) {
  330. return v1;
  331. }
  332. return '';
  333. }
  334. function InnerChamferFormatter(v, r) {
  335. let v1 = r.innerChamfer1;
  336. let v2 = r.innerChamfer2;
  337. if (v1 && v2) {
  338. return v1 + '~' + v2;
  339. }
  340. if (v1) {
  341. return v1;
  342. }
  343. return '';
  344. }
  345. function OutChamferFormatter(v, r) {
  346. let v1 = r.outChamfer1;
  347. let v2 = r.outChamfer2;
  348. if (v1 && v2) {
  349. return v1 + '~' + v2;
  350. }
  351. if (v1) {
  352. return v1;
  353. }
  354. return '';
  355. }
  356. </script>
  357. <script>
  358. function DrawingFormatter(v, r) {
  359. let str = '';
  360. if (v) {
  361. let arrv = v.split('[>>]');
  362. arrv.forEach(function (value, i) {
  363. console.log(i)
  364. str += `<img width="80" height="30" src="${value}" onclick="f_showPic('${value}','${r.standardAbbrName}')" />`;
  365. });
  366. }
  367. return str;
  368. }
  369. let currCatalogName = '';
  370. function f_showPic(dataurl, sn) {
  371. currCatalogName = sn;
  372. $('#drawing_modal .drawing').empty();
  373. let w = $('#drawing_modal .drawing').width();
  374. let h = $('#drawing_modal .drawing').height();
  375. //$('#drawing_modal .drawing').append(`<img width="320px" height="120px" src="${dataurl}" />`);
  376. $('#drawing_modal .drawing').append(`<img style="width:480px;height:170px" src="${dataurl}" />`);
  377. $('#drawing_modal').modal("show", { keyboard: true });
  378. }
  379. // 保存按钮点击事件方法
  380. function saveImg() {
  381. var sampleImage = $('#drawing_modal .drawing img')[0]; // 找到图片所在的img标签
  382. var canvas = convertImageToCanvas(sampleImage); //创建画板
  383. var url = canvas.toDataURL("image/png"); //生成下载的url
  384. //var triggerDownload = $("#saveImg").attr("href", url).attr("download", "ewm.png"); // 把url放到我们的a标签中,并得到a标签对象
  385. // triggerDownload[0].click(); //模拟点击一下a标签,即可下载啦!
  386. let pngName = currCatalogName ? currCatalogName + ".png" : "ewm.png";
  387. $("body").append(`<a id="tempLink" href="${url}" download="${pngName}"></a>`);
  388. $("#tempLink")[0].click();
  389. $("#tempLink").remove();
  390. }
  391. /**
  392. * 根据图片生成画布
  393. */
  394. function convertImageToCanvas(image) {
  395. var canvas = document.createElement("canvas");
  396. canvas.width = image.width;
  397. canvas.height = image.height;
  398. canvas.getContext("2d").drawImage(image, 0, 0);
  399. return canvas;
  400. }
  401. function ActionFormatter(v, r) {
  402. let str = `<span class="table-action" onclick="f_showDetail(${r.id})"><i class="iconfont icon-right"></i>查看详情</span>`;
  403. return str;
  404. }
  405. function f_showDetail(id) {
  406. tmpSearch[0].KeyWords = id;
  407. $tableDetail.iwbTable('setSearchList', tmpSearch);
  408. $tableDetail.iwbTable('refresh');
  409. $("#detail_modal").modal('show');
  410. }
  411. </script>
  412. }