MaintainRecord.cshtml 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. @using ShwasherSys
  2. @using ShwasherSys.Authorization.Permissions
  3. @using ShwasherSys.CompanyInfo.DeviceInfo.Dto
  4. @using ShwasherSys.Models.Layout
  5. @using ShwasherSys.Views.Shared.New.Modals
  6. @using ShwasherSys.Views.Shared.New.Table
  7. @{
  8. ViewBag.Title = "机模维护记录";
  9. string activeMenu = PermissionNames.PagesCompanyDieMaintenanceMaintainRecord; //The menu item will be active for this page.
  10. ViewBag.ActiveMenu = activeMenu;
  11. List<SelectListItem> mType = ViewBag.MaintainType, mState = ViewBag.MaintainState;
  12. var searchForm = new SearchFormViewModal(new List<SearchItem>()
  13. {
  14. new SearchItem("id","记录编号"),
  15. new SearchItem("deviceNo","机模编号"),
  16. //new SearchItem("deviceType","机模类型",FiledType.I,ExpType.Equal).SetSearchItem(mType),
  17. new SearchItem("planDate","计划时间",FiledType.D,ExpType.GreaterOrEqual),
  18. new SearchItem("planDate","至",FiledType.D,ExpType.LessOrEqual),
  19. new SearchItem("completeState","完成状态",FiledType.I,ExpType.Equal).SetSearchItem(mState),
  20. new SearchItem("completeDate","完成时间",FiledType.Dnull,ExpType.GreaterOrEqual),
  21. new SearchItem("completeDate","至",FiledType.Dnull,ExpType.LessOrEqual),
  22. },"search-form",false);
  23. var table = new TableViewModel( "/api/services/app/MaintainRecord/GetAll", activeMenu, searchForm)
  24. .SetFields(new List<FieldItem>()
  25. {
  26. new FieldItem("id", "记录编号"),
  27. new FieldItem("deviceMgPlanNo", "计划编号"),
  28. new FieldItem("deviceNo", "设备编号"),
  29. new FieldItem("deviceName", "设备名称"),
  30. new FieldItem("mgType", "机模类型","DeviceTypeFormatter"),
  31. new FieldItem("address", "维护地点"),
  32. new FieldItem("planDate", "计划时间","ExDateFormatter"),
  33. new FieldItem("completeState", "完成状态","StateFormatter"),
  34. new FieldItem("completeDate", "完成时间","DateFormatter"),
  35. });
  36. var table2 = new TableViewModel( "/api/services/app/MaintainRecord/GetAllMember", PermissionNames.PagesCompanyDieMaintenanceMaintainMember,"member-table")
  37. .SetFields(new List<FieldItem>()
  38. {
  39. new FieldItem("id", "编号"),
  40. new FieldItem("employeeNo", "工号"),
  41. new FieldItem("name", "姓名"),
  42. new FieldItem("workHour", "工时","WorkHourFormatter"),
  43. new FieldItem("startDateTime", "开始时间","DateTimeFormatter"),
  44. new FieldItem("endDateTime", "结束时间","DateTimeFormatter"),
  45. });
  46. }
  47. @section css{
  48. }
  49. @Html.Partial("New/Table/_Table", table)
  50. @Html.Partial("New/Table/_Table", table2)
  51. @section modal{
  52. <!--Main Modal-->
  53. @{
  54. var modal = new ModalViewModel("维护记录", new ModalBodyViewModel(new List<Input>()
  55. {
  56. new InputHide("id"),
  57. //new Input("deviceNo", "设备编号"),
  58. new Input("deviceName", "设备名称"),
  59. new Input("mgType", "机模类型").SetSelectOptions(mType),
  60. new Input("address", "维护地点").SetNotRequired(),
  61. new InputDate("planDate", "计划时间").SetNotRequired(),
  62. new InputTextarea("description", "维护内容"),
  63. //new InputDateTime("completeDate", "完成时间").SetNotRequired(),
  64. }));
  65. }
  66. @Html.Partial("New/Modals/_Modal", modal)
  67. @{
  68. var mModal = new ModalViewModel("维护人员", new ModalBodyViewModel(new List<Input>()
  69. {
  70. new InputHide("id"),
  71. new InputHide("maintenanceNo"),
  72. new InputHide("employeeId"),
  73. new InputHide("employeeNo", "工号"),
  74. new Input("name", "维护人员").SetSearchIcon("query_employee_modal","member-modal"),
  75. new InputDateTime("startDateTime", "开始时间",@class:"calc-date"),
  76. new InputDateTime("endDateTime", "结束时间",@class:"calc-date").SetNotRequired(),
  77. new Input("workHour", "工时(小时)").SetNotRequired(),
  78. new InputTextarea("workDesc", "工作内容").SetNotRequired(),
  79. }),"member-modal");
  80. }
  81. @Html.Partial("New/Modals/_Modal", mModal)
  82. @{
  83. var cModal = new ModalViewModel("完成维护","", new ModalBodyViewModel(new List<Input>()
  84. {
  85. new InputHide("id"),
  86. new InputHide("maintenanceNo"),
  87. new InputDate("completeDate", "完成时间"),
  88. }),"complete-modal");
  89. }
  90. @Html.Partial("New/Modals/_Modal", cModal)
  91. @Html.Partial("Modals/Query/_Employee", "employeeNo,name,employeeId")
  92. }
  93. @section scripts
  94. {
  95. <script type="text/javascript">
  96. var $table = $('#table'), $mTable = $('#member-table'), mNo = "";
  97. $mTable.closest('.table-box').css("display", "none");
  98. $(function() {
  99. $("#table").bootstrapTable('resetView', { height: 800 });
  100. function mOnCheck(row) {
  101. $table.bootstrapTable('resetView', { height: 500 });
  102. $mTable.closest('.table-box').css("display", "block");
  103. mNo = row.id;
  104. $mTable.bootstrapTable("destroy");
  105. LoadTable({
  106. table: $mTable,
  107. queryParams: queryItemParams,
  108. onAll: function(eName, eData) {
  109. OnAll(eName, eData, "member-table");
  110. },
  111. onLoadSuccess: function(data) {
  112. OnLoadSuccess(data, "member-table");
  113. },
  114. onPostBody: function(data) {
  115. OnPostBody(data, "member-table");
  116. }
  117. });
  118. $mTable.bootstrapTable('resetView');
  119. }
  120. function mOnUnCheck() {
  121. mNo = "";
  122. $mTable.closest('.table-box').css("display", "none");
  123. $mTable.bootstrapTable("destroy");
  124. $("#table").bootstrapTable('resetView', { height: 800 });
  125. }
  126. function queryItemParams(params) {
  127. return {
  128. MaxResultCount: params.limit,
  129. SkipCount: params.offset,
  130. sort: params.sort,
  131. sortOrder: params.order,
  132. SearchList: [{ KeyWords: mNo, KeyField: "maintenanceNo", FieldType: "0", ExpType: "0" }]
  133. };
  134. }
  135. function tableLoad(data) {
  136. OnLoadSuccess(data);
  137. if (mNo && data.total > 0) {
  138. $table.bootstrapTable("checkBy", { field: "id", values: [mNo] });
  139. } else {
  140. mOnUnCheck();
  141. }
  142. }
  143. LoadTable({
  144. onCheck: mOnCheck,
  145. onUncheck: mOnUnCheck,
  146. onLoadSuccess: tableLoad
  147. });
  148. var funs = window.funs || { none: function() { console.log("No type"); } };
  149. $mTable.closest(".table-box").find("#tableTool .btn").on('click',
  150. function() {
  151. var type = $(this).data('type').replace("_", "");
  152. var url = $(this).data('url') || "";
  153. funs[type] ? funs[type].call(this, url) : funs["none"].call(this);
  154. });
  155. funs["btnCreate"] = function() { BtnCreate({ data: { id: "", mgType: @(MaintainTypeDefinition.Other) }, disabled: "mgType"}); }
  156. funs["btnUpdate"] = function() {
  157. var row = $table.bootstrapTable("getSelections")[0];
  158. console.log(row);
  159. if (row) {
  160. if (row.completeState !== @(MaintainStateDefinition.New)) {
  161. abp.message.warn("维护已开始,不能修改。");
  162. return;
  163. }
  164. BtnUpdate({ disabled: "deviceNo,deviceName,mgType" });
  165. }
  166. };
  167. funs["btnAddMember"] = function(url) {
  168. var row = $table.bootstrapTable("getSelections")[0];
  169. if (row) {
  170. if (row.completeState !== @(MaintainStateDefinition.New) &&
  171. row.completeState !== @(MaintainStateDefinition.Start)) {
  172. abp.message.warn("维护已完成,不能添加人员。");
  173. return;
  174. }
  175. var data = { url: url, data: row, disabled: "workHour" };
  176. $('#name').closest('.form-group-sm ').show();
  177. if (row.completeState === @(MaintainStateDefinition.New)) {
  178. MsgConfirm("确认开始维护并添加维护人员?", "开始维护", AddMember, data);
  179. } else {
  180. AddMember(data);
  181. }
  182. }
  183. };
  184. funs["btnComplete"] = function(url) {
  185. var row = $table.bootstrapTable("getSelections")[0];
  186. if (row) {
  187. if (row.completeState !== @(MaintainStateDefinition.Start)) {
  188. abp.message.warn("维护未开始,不能完成。");
  189. return;
  190. }
  191. OpenModal({
  192. url: url,
  193. data: row,
  194. modal: $('#complete-modal'),
  195. success: function() {
  196. $('#complete-modal').modal("hide");
  197. RefreshTable();
  198. }
  199. });
  200. }
  201. };
  202. funs["btnUpdateMember"] = function(url) {
  203. var row = $mTable.bootstrapTable("getSelections")[0];
  204. if (row) {
  205. $('#name').closest('.form-group-sm ').hide();
  206. var data = { url: url, data: row, disabled: "workHour", modaltitle: window.opUpdate };
  207. AddMember(data);
  208. }
  209. };
  210. funs["btnDeleteMember"] = function(url) {
  211. var row = $mTable.bootstrapTable("getSelections")[0];
  212. if (row) {
  213. BtnDelete(url, $mTable);
  214. }
  215. };
  216. $('.calc-date').on('change', CalcWorkHour);
  217. $("#Tool1").append(
  218. '<div class="tool-radio"><input name="radioType" type="radio" id="radioType1" checked value=""/><label for="radioType1">全部</label></div>' +
  219. '<div class="tool-radio"><input name="radioType" type="radio" id="radioType2" value="@(MaintainTypeDefinition.Mold)"/><label for="radioType2">模具维护</label></div>' +
  220. '<div class="tool-radio"><input name="radioType" type="radio" id="radioType3" value="@(MaintainTypeDefinition.Device)"/><label for="radioType3">设备维护</label></div>' +
  221. '<div class="tool-radio"><input name="radioType" type="radio" id="radioType4" value="@(MaintainTypeDefinition.Other)"/><label for="radioType4">其他维护</label></div>');
  222. $(".tool-radio input[type='radio']").on('click',
  223. function(e) {
  224. document.getElementById("SearchForm").reset();
  225. GetSearchList();
  226. mOnUnCheck();
  227. RefreshTable();
  228. });
  229. });
  230. function GetSearchList() {
  231. var count = $("#SearchForm").find(".KeyWords").length;
  232. window._searchList = [];
  233. var radioType = $('input[name="radioType"]:checked').val();
  234. if (radioType) {
  235. window._searchList.push({ KeyWords: radioType, KeyField: "mgType", FieldType: "1", ExpType: "0" });
  236. }
  237. for (var i = 1; i <= count; i++) {
  238. var keyWords = $("#KeyWords-" + i).val();
  239. if (keyWords) {
  240. var keyField = $("#KeyField-" + i).val();
  241. var fieldType = $("#FieldType-" + i).val();
  242. var expType = $("#ExpType-" + i).val();
  243. window._searchList.push({
  244. KeyWords: keyWords,
  245. KeyField: keyField,
  246. FieldType: fieldType,
  247. ExpType: expType
  248. });
  249. }
  250. }
  251. }
  252. function CalcWorkHour() {
  253. var s = $('#startDateTime').val(), e = $('#endDateTime').val();
  254. if (s && e) {
  255. try {
  256. var sd = new Date(s), ed = new Date(e);
  257. if (sd < ed) {
  258. var timeSpan = ed.getTime() - sd.getTime();
  259. var h = Math.floor(timeSpan * 100 / (1000 * 60 * 60)) / 100;
  260. $('#workHour').val(h);
  261. } else {
  262. $('#workHour').val('');
  263. }
  264. } catch (e) {
  265. }
  266. }
  267. }
  268. function AddMember(opt) {
  269. var o = $.extend({},
  270. {
  271. modal: $('#member-modal'),
  272. success: function() {
  273. $('#member-modal').modal("hide");
  274. RefreshTable();
  275. }
  276. },
  277. opt);
  278. OpenModal(o);
  279. }
  280. </script>
  281. <!--格式化-->
  282. <script id="formatter-script" type="text/javascript">
  283. function DeviceTypeFormatter(v) {
  284. var name = $('#hid-type option[value="' + v + '"]').text();
  285. switch (v) {
  286. case 1:
  287. return '<span class="label label-danger">' + name + '</span>';
  288. default:
  289. return '<span class="label label-info">' + name + '</span>';
  290. }
  291. }
  292. function StateFormatter(v) {
  293. var name = $('#hid-state option[value="' + v + '"]').text();
  294. switch (v) {
  295. case 1:
  296. return '<span class="label label-info">' + name + '</span>';
  297. case 2:
  298. return '<span class="label label-iwb">' + name + '</span>';
  299. case 3:
  300. return '<span class="label label-success">' + name + '</span>';
  301. case 4:
  302. return '<span class="label label-danger">' + name + '</span>';
  303. default:
  304. return '<span class="label label-info">' + name + '</span>';
  305. }
  306. }
  307. function ExDateFormatter(v, r, i, f) {
  308. var value = DateFormatter(v, r, i, f);
  309. if (r.completeState === @(MaintainStateDefinition.Complete) ||
  310. r.complateState === @(MaintainStateDefinition.End)) {
  311. return '<span style="color:#00a65a">' + value + '</span>';
  312. }
  313. if (value <= new Date().format('yyyy-MM-dd')) {
  314. return '<span style="color:red" class="iwb-flash2">' + value + ' [已到期]</span>';
  315. }
  316. var date = new Date(new Date(new Date().getTime() + 10 * 1000 * 60 * 60 * 24)).format('yyyy-MM-dd');
  317. if (date >= value) {
  318. return '<span style="color:orange" class="iwb-flash">' + value + ' [即将到期]</span>';
  319. }
  320. return value;
  321. }
  322. function WorkHourFormatter(v, r) {
  323. if (v > 0) {
  324. if (r.isComfirm) {
  325. return '<span class="label label-success">' + v + '小时 </span>';
  326. } else {
  327. return '<span class="label label-info">' + v + '小时 </span>';
  328. }
  329. } else {
  330. return '<span class="label label-danger">0</span>';
  331. }
  332. }
  333. function TypeFormatter(v) {
  334. var name = $('#hid-type option[value="' + v + '"]').text();
  335. switch (v) {
  336. case 0:
  337. return '<span class="label label-danger">' + name + '</span>';
  338. default:
  339. return '<span class="label label-info">' + name + '</span>';
  340. }
  341. }
  342. </script>
  343. }
  344. <section style="display: none">
  345. <select id="hid-type">
  346. <option value=""></option>
  347. </select>
  348. @Html.DropDownList("hid-state", mState)
  349. @Html.DropDownList("hid-type", mType)
  350. </section>