NotCompleteOrderItem.cshtml 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555
  1. @using System.Web.UI.HtmlControls
  2. @using Abp.Authorization
  3. @using Microsoft.Ajax.Utilities
  4. @using ShwasherSys.Authorization.Permissions
  5. @using ShwasherSys.Models.Layout
  6. @using ShwasherSys.Models.Modal
  7. @{
  8. /**/
  9. ViewBag.ActiveMenu = PermissionNames.PagesOrderInfoNotCompleteOrderItem; //The menu item will be active for this page.
  10. ViewBag.Title = "未完成订单明细查询";
  11. bool isCanViewPrice = IsGranted(PermissionNames.PagesOrderInfoOrderMgQueryOrderPrice);
  12. List<SelectListItem> OrderStatusList = ViewBag.OrderStatus;
  13. List<SelectListItem> emergencyLevelList = ViewBag.EmergencyLevel;
  14. List<SelectListItem> OrderSaleTypeList = ViewBag.OrderSaleType;
  15. List<SelectListItem> OrderItemStatusList = new List<SelectListItem>()
  16. {
  17. new SelectListItem()
  18. {
  19. Text = "未完成",
  20. Value = "N"
  21. }
  22. };//ViewBag.OrderItemStatus;
  23. OrderItemStatusList.AddRange((List<SelectListItem>)ViewBag.OrderItemStatus);
  24. List<SelectListItem> isOverdue = new List<SelectListItem>()
  25. {
  26. new SelectListItem()
  27. {
  28. Text = "未超期",
  29. Value = "0"
  30. }
  31. ,
  32. new SelectListItem()
  33. {
  34. Text = "超期",
  35. Value = "1"
  36. }
  37. };
  38. List<SelectListItem> storeCompleteState = new List<SelectListItem>()
  39. {
  40. new SelectListItem()
  41. {
  42. Text = "货物不齐全",
  43. Value = "0"
  44. }
  45. ,
  46. new SelectListItem()
  47. {
  48. Text = "货物已齐",
  49. Value = "1"
  50. },
  51. new SelectListItem()
  52. {
  53. Text = "货物已齐,待改包",
  54. Value = "2"
  55. },
  56. new SelectListItem()
  57. {
  58. Text = "重新安排生产",
  59. Value = "3"
  60. },
  61. new SelectListItem()
  62. {
  63. Text = "返镀",
  64. Value = "4"
  65. }
  66. };
  67. var searchForm = new SearchFormViewModal(new List<SearchItem>()
  68. {
  69. new SearchItem("sendDate", "发货日期", FiledType.D, ExpType.GreaterOrEqual),
  70. new SearchItem("sendDate", "到", FiledType.D, ExpType.LessOrEqual),
  71. new SearchItem("customerId", "客户编号").SetSearchIcon("query_customer_modal"),
  72. new SearchItem("isOverdue", "已超过送货日期").SetSearchItem(isOverdue),
  73. new SearchItem("orderNo", "订单流水号"),
  74. new SearchItem("saleType", "内销/外销", FiledType.Inull, ExpType.Equal).SetSearchItem(OrderSaleTypeList),
  75. new SearchItem("orderItemStatusId", "订单明细状态", FiledType.Inull, ExpType.Equal).SetSearchItem(OrderItemStatusList, isAddBlank: false),
  76. new SearchItem("productName", "产品名称"),
  77. new SearchItem("model", "规格"),
  78. new SearchItem("material", "材质"),
  79. new SearchItem("surfaceColor", "表色"),
  80. new SearchItem("partNo", "零件号"),
  81. new SearchItem("stockNo", "客户订单号"),
  82. new SearchItem("StoreCompleteState", "是否库齐", FiledType.I, ExpType.Equal).SetSearchItem(storeCompleteState),
  83. new SearchItem("emergencyLevel", "紧急程度", FiledType.I, ExpType.Equal).SetSearchItem(emergencyLevelList)
  84. }, false);
  85. }
  86. @section css{
  87. <link href="~/Content/Plugins/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css" rel="stylesheet" />
  88. <style>
  89. #cbkLabel:after, #cbkLabel:before {
  90. top: -8px;
  91. }
  92. #cbkLabel:after {
  93. width: 15px;
  94. height: 15px;
  95. }
  96. </style>
  97. }
  98. <div class="table-box mr-4 iwb-bootstrap-table">
  99. @*@Html.Action("ToolMenu", "Layout", new { pageName = ViewBag.ActiveMenu, searchForm })*@
  100. <div class="btn-toolbar row" role="toolbar" id="tableTool" aria-label="Toolbar with button groups">
  101. <div class="col-sm-8 col-lg-9 pull-left" style="padding: 0">
  102. <div class="btn-group btn-group-sm" id="Tool1" role="group" aria-label="First group">
  103. @if (PermissionChecker.IsGranted(PermissionNames.PagesOrderInfoOrderQueryMgExportExcel))
  104. {
  105. <div style="display: inline-block;"><input type="checkbox" class="filled-in" id="ckbExportId" name="ckbExportId" /><label for="ckbExportId" style="margin-left: 10px; color: #f5f5f5;" id="cbkLabel">导出选中明细</label></div>
  106. <button type="button" class="btn btn-default" data-type="_btnExportExcel" data-url="/api/services/app/OrderItems/ExportExcel" >
  107. <i class="iconfont icon-download">导出Excel</i>
  108. </button>
  109. }
  110. </div>
  111. </div>
  112. <div class="col-sm-4 col-lg-3 pull-right" style="padding: 0">
  113. @*@Html.Action("SearchForm_Sig", "Layout", new { SelectList = selectList })*@
  114. @Html.Partial("_SearchForm", searchForm)
  115. </div>
  116. </div>
  117. <table id="table"
  118. data-url="/api/services/app/OrderItems/GetViewAllNot"
  119. data-striped="true" data-id-field="id" data-unique-id="id"
  120. data-method="post"
  121. data-side-pagination="server"
  122. data-content-type="application/x-www-form-urlencoded; charset=UTF-8"
  123. data-cache="false"
  124. data-pagination="true" data-page-size="50" data-page-number="1" data-page-list="[30,50,100,200]" data-pagination-detail-h-align="right" data-pagination-h-align="left" data-resizable="true"
  125. data-query-params="QueryParams"
  126. data-response-handler="ResponseHandler"
  127. data-click-to-select="true"
  128. data-single-select="false"
  129. data-show-jumpto="true">
  130. <thead>
  131. <tr class="row" id="header">
  132. <th data-field="state" data-checkbox="true"></th>
  133. <th data-align="center" data-field="orderNo" data-width="100">订单流水号</th>
  134. <th data-align="center" data-field="stockNo">客户订单号</th>
  135. <th data-align="center" data-field="customerName">客户</th>
  136. <th data-align="center" data-field="orderDate" data-formatter="OrderDateFormatter">订单日期</th>
  137. <th data-align="center" data-field="partNo">零件号</th>
  138. <th data-align="center" data-field="productName">产品名称</th>
  139. <th data-align="center" data-field="model">型号</th>
  140. <th data-align="center" data-field="material">材质</th>
  141. <th data-align="center" data-field="surfaceColor">表色</th>
  142. <th data-align="center" data-field="rigidity">硬度</th>
  143. <th data-align="center" data-field="quantity" data-formatter="QuantityFormatter">数量</th>
  144. <th data-align="center" data-field="isSendQuantity">已发数量</th>
  145. <th data-align="center" data-field="remainingQuantity">剩余数</th>
  146. <th data-align="center" data-field="sendDate" data-formatter="SendDateFormatter">送货日期</th>
  147. @*<th data-align="center" data-field="saleType" data-formatter="SaleTypeFormatter">外销/内销</th>
  148. <th data-align="center" data-field="isReport" data-formatter="IsReportFormatter">检验报告</th>*@
  149. @*<th data-align="center" data-field="isPartSend" data-formatter="IsPartSendFormatter">部分送货</th>*@
  150. <th data-align="center" data-field="emergencyLevel" data-formatter="EmergencyLevelFormatter">紧急程度</th>
  151. <th data-align="center" data-field="orderItemStatusName" data-formatter="OrderItemStatusFormatter">状态</th>
  152. <th data-align="center" data-field="storeCompleteState" data-formatter="StoreCompleteStateFormatter">是否库齐</th>
  153. <th data-align="center" data-field="productNo">产品编号</th>
  154. @if (isCanViewPrice)
  155. {
  156. <th data-align="center" data-field="currencyId">货币</th>
  157. <th data-align="center" data-field="totalPrice" data-formatter="TotalPriceFormatter">含税总价</th>
  158. <th data-align="center" data-field="afterTaxTotalPrice" data-formatter="TotalPriceFormatter">不含税总价</th>
  159. }
  160. </tr>
  161. </thead>
  162. </table>
  163. </div>
  164. @section modal{
  165. <section>
  166. @*@Html.Hidden("isForSearch", "0");*@
  167. @Html.Partial("Modals/Query/_Customer", "KeyWords-3")
  168. </section>
  169. }
  170. @section scripts
  171. {
  172. @*<script src="~/Content/Plugins/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js"></script>
  173. <script src="~/Content/Plugins/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.zh-CN.js"></script>*@
  174. <script src="~/Content/Plugins/bootstrap-table/extensions/resizable/colResizable-1.6.min.js"></script>
  175. <script src="~/Content/Plugins/bootstrap-table/extensions/resizable/bootstrap-table-resizable.js"></script>
  176. <script type="text/javascript">
  177. var isExportById = false;
  178. $(function () {
  179. //show完毕前执行
  180. var nowDate = new Date();
  181. var preDate = new Date(nowDate.getTime() - 30 * 24 * 60 * 60 * 1000);
  182. var endDate = new Date(nowDate.getTime() + 30 * 24 * 60 * 60 * 1000);
  183. $("#KeyWords-1").val(preDate.Format("yyyy-MM-dd"));
  184. $("#KeyWords-2").val(endDate.Format("yyyy-MM-dd"));
  185. LoadTable();
  186. //LoadQueryCustomerTable();
  187. var funs = window.funs || { none: function () { console.log("No type"); } };
  188. //funs["btnUpdate"] = function () { BtnUpdate({ readonly: "standardName" }); };
  189. funs["btnExportExcel"] = function (url) {
  190. BtnExportExcel(url);
  191. }
  192. $("#table thead th.bs-checkbox ").off("click.checkOnTable").on("click.checkOnTable",
  193. function() {
  194. $(this).find("input").click();
  195. });
  196. $("#ckbExportId").on('change',function(e) {
  197. if ($(this).is(":checked")) {
  198. isExportById = true;
  199. } else {
  200. isExportById = false;
  201. }
  202. });
  203. /*funs["btnCreate"] = function () {
  204. abp.ajax({
  205. url: window.appUrl + 'OrderHeaders/GetNewOrderNo',
  206. async: true,
  207. type: "Post",
  208. contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
  209. isValidate: false,
  210. dataType: "json",
  211. success: function (res) {
  212. BtnCreate({ readonly: "id,sendAdress,customerId ", disabled: "orderStatusId", data: { orderStatusId: "2", id: res, orderDate: GetNowFormatDate() } });
  213. //$("#OrderStatusId").val("2").select2();
  214. }
  215. });
  216. }
  217. */
  218. //$("#KeyWords-4").on('init.change',function(e) {
  219. // var v = $(this).val();
  220. // if (v) {
  221. // $(".search-unit [data-index='1']").hide();
  222. // } else {
  223. // $(".search-unit [data-index='1']").show();
  224. // }
  225. //});
  226. });
  227. function BtnExportExcel(url) {
  228. if (isExportById) {
  229. window._searchList = [];
  230. var rows = $("#table").bootstrapTable("getSelections");
  231. if (rows.length === 0) {
  232. abp.message.warn("未选中任何一条记录进行导出!");
  233. }
  234. rows.forEach(function(r) {
  235. _searchList.push({
  236. KeyWords: r.id,
  237. KeyField: "id",
  238. FieldType: "1",
  239. ExpType: "0",
  240. LogicType:"1"
  241. });
  242. });
  243. } else {
  244. GetSearchList();
  245. }
  246. console.log(_searchList);
  247. abp.ajax({
  248. url: url,
  249. async: true,
  250. data: JSON.stringify(_searchList),
  251. type: "Post",
  252. contentType: 'application/json',
  253. isValidate: false,
  254. dataType: "json",
  255. success: function (res) {
  256. window.location.href = "/" + res;
  257. }
  258. });
  259. /*SaveAjax({
  260. url: url,
  261. data: _searchList,
  262. isValidate: false,
  263. isAlert: false,
  264. success: function(res) {
  265. window.location.href = res;
  266. }
  267. });*/
  268. }
  269. function GetSearchList() {
  270. var count = $("#SearchForm").find(".KeyWords").length;
  271. var isHasIsOverdue = $("#KeyWords-4").val();
  272. window._searchList = [];
  273. for (var i = 1; i <= count; i++) {
  274. var keyWords = $("#KeyWords-" + i).val();
  275. var keyField = $("#KeyField-" + i).val();
  276. if (keyWords) {
  277. var fieldType = $("#FieldType-" + i).val();
  278. var expType = $("#ExpType-" + i).val();
  279. //if (fieldType === "5" && expType === "5") {
  280. // var endDate = new Date(keyWords);
  281. // var qDate = new Date(endDate.getTime() + 24 * 60 * 60 * 1000);
  282. // keyWords = qDate.Format("yyyy-MM-dd");
  283. //}
  284. if (isHasIsOverdue && keyField === "sendDate") {
  285. continue;
  286. }
  287. if (keyField === "isOverdue") {
  288. var nowDate = new Date();
  289. if (keyWords === "0") {
  290. _searchList.push({
  291. KeyWords: nowDate.Format("yyyy-MM-dd"),
  292. KeyField: "sendDate",
  293. FieldType: "5",
  294. ExpType: "4"
  295. });
  296. continue;
  297. } else if (keyWords === "1") {
  298. _searchList.push({
  299. KeyWords: nowDate.Format("yyyy-MM-dd"),
  300. KeyField: "sendDate",
  301. FieldType: "5",
  302. ExpType: "3"
  303. });
  304. continue;
  305. }
  306. }
  307. if (keyField === "orderItemStatusId") {
  308. if (keyWords === "N") {
  309. _searchList.push({
  310. KeyWords: "11",
  311. KeyField: "orderItemStatusId",
  312. FieldType: "2",
  313. ExpType: "1"
  314. });
  315. continue;
  316. }
  317. }
  318. _searchList.push({
  319. KeyWords: keyWords,
  320. KeyField: keyField,
  321. FieldType: fieldType,
  322. ExpType: expType
  323. });
  324. }
  325. }
  326. }
  327. function StoreCompleteStateFormatter(v, r) {
  328. var str = "";
  329. if (v === 0) {
  330. str = '<span class="label label-danger">货物不齐全</span>';
  331. } else if (v === 1) {
  332. str = '<span class="label label-success">货物已齐</span>';
  333. } else if (v === 2) {
  334. str = '<span class="label label-success">货物已齐,待改包</span>';;
  335. } else if (v === 3) {
  336. str = '<span class="label label-success">重新安排生产</span>';;
  337. } else if (v === 4) {
  338. str = '<span class="label label-success">返镀</span>';;
  339. }
  340. return str;
  341. }
  342. function OrderItemStatusFormatter(v, r) {
  343. if (r.orderItemStatusId === 15) {
  344. return '<span class="label label-success">完成审核</span>';
  345. } else if (r.orderItemStatusId === 9) {
  346. return '<span class="label label-danger">发货</span>';
  347. } else if (r.orderItemStatusId === 11) {
  348. return '<span class="label label-primary">结束</span>';
  349. } else if (r.orderItemStatusId === 2) {
  350. return '<span class="label label-info">新建</span>';
  351. }
  352. return v;
  353. }
  354. function IsReportFormatter(v, r) {
  355. var str = "";
  356. if (v === "Y") {
  357. str = '<span class="table-action">需要</span>';
  358. } else if (v === "N") {
  359. str = '<span class="table-action">不需要</span>';;
  360. }
  361. return str;
  362. }
  363. function SaleTypeFormatter(v, r) {
  364. var str = "";
  365. if (v === 1) {
  366. str = '<span class="table-action">内销</span>';
  367. } else if (v === 2) {
  368. str = '<span class="table-action">外销</span>';;
  369. }
  370. return str;
  371. }
  372. function SendDateFormatter(v, r) {
  373. var dataNow = abp.clock.now();
  374. var sendDate = new Date(v);
  375. var s1 = dataNow.getTime(), s2 = sendDate.getTime();
  376. var span = (s2 - s1) / 1000;
  377. var dayspan = parseInt(span / (24 * 60 * 60));
  378. if (dayspan < 0) {
  379. return '<span style="text-decoration:underline;color:#ff0000" >' +
  380. sendDate.Format('yyyy-MM-dd') +
  381. '</span>';
  382. }
  383. if (dayspan > -1 && dayspan < 4) {
  384. return '<span style="text-decoration:underline;color:#dd4b39" >' +
  385. sendDate.Format('yyyy-MM-dd') +
  386. '</span>';
  387. }
  388. return '<span style="text-decoration:underline;" >' + sendDate.Format('yyyy-MM-dd') + '</span>';
  389. }
  390. function QuantityFormatter(v, r) {
  391. var str = '<span style="text-decoration:underline;" >' + v + '</span>';
  392. return str;
  393. }
  394. function TotalPriceFormatter(v, r) {
  395. var str = "0.00";
  396. if (v && v > 0) {
  397. v = (v * 10000) / 10000;
  398. str = _formatAmount(v, 4);
  399. }
  400. str = '<span style="text-decoration:underline;">' + str + '</span>';
  401. return str;
  402. }
  403. function IsPartSendFormatter(v, r) {
  404. var str = "";
  405. if (v === "Y") {
  406. str = '<span class="table-action">是</span>';
  407. } else if (v === "N") {
  408. str = '<span class="table-action">否</span>';;
  409. }
  410. return str;
  411. }
  412. function OrderDateFormatter(v, r) {
  413. var orderDate = new Date(v);
  414. return '<span style="text-decoration:underline;" >' + orderDate.Format('yyyy-MM-dd') + '</span>';
  415. }
  416. function EmergencyLevelFormatter(v, r) {
  417. let result = '';
  418. var name = $('#hid-emergencyLevel option[value="' + v + '"]').text();
  419. if (v === 1) {
  420. result += '<span class="label label-success">' + name + '</span>';
  421. } else {
  422. result += '<span class="label label-danger">' + name + '</span>';
  423. }
  424. return result;
  425. }
  426. </script>
  427. <script>
  428. // 对Date的扩展,将 Date 转化为指定格式的String
  429. // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
  430. // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
  431. // 例子:
  432. // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
  433. // (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
  434. Date.prototype.Format = function (fmt) { //author: meizz
  435. var o = {
  436. "M+": this.getMonth() + 1, //月份
  437. "d+": this.getDate(), //日
  438. "h+": this.getHours(), //小时
  439. "m+": this.getMinutes(), //分
  440. "s+": this.getSeconds(), //秒
  441. "q+": Math.floor((this.getMonth() + 3) / 3), //季度
  442. "S": this.getMilliseconds() //毫秒
  443. };
  444. if (/(y+)/.test(fmt))
  445. fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  446. for (var k in o)
  447. if (new RegExp("(" + k + ")").test(fmt))
  448. fmt = fmt.replace(RegExp.$1,
  449. (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  450. return fmt;
  451. }
  452. //将数字转换成金额显示 n是小数点后位数
  453. function toNumber(num, n) {
  454. var re = String(num);
  455. var dotfront = "";
  456. var dotlast = "";
  457. if (re.indexof('.') > -1) {
  458. var sarr = re.spilt('.');
  459. dotfront = sarr[0];
  460. dotlast = sarr[1];
  461. var dotlastlength = strlen(dotlast);
  462. if (dotlastlength < n) {
  463. for (var j = 0; j < n - dotlastlength; j++) {
  464. dotlast += "0";
  465. }
  466. }
  467. if (dotlastlength > n) {
  468. dotlast = dotlast.substr(0, n);
  469. }
  470. } else {
  471. dotfront = re;
  472. for (var i = 0; i < n; i++) {
  473. dotlast += "0";
  474. }
  475. }
  476. num = dotfront + '.' + dotlast;
  477. return num;
  478. }
  479. function _formatAmount(strData, n) {
  480. var CurrencyAndAmountRegExp =
  481. /^(\d{1,18})|(\d{1,18}\.)|(\d{1,17}\.\d{0,1})|(\d{1,16}\.\d{0,2})|(\.\d{1,2})$/;
  482. var _result = CurrencyAndAmountRegExp.test(strData);
  483. if (_result == false) {
  484. return strData;
  485. } // 一般来说最多就6位吧,当然如果有特殊需求可自行更改(`・∀・´)
  486. n = n > 0 && n <= 6 ? n : 2;
  487. var formatData = parseFloat((strData + '').replace(/[^\d\.-]/g, '')).toFixed(n) + '';
  488. var l = formatData.split('.')[0].split('').reverse();
  489. var r = formatData.split('.')[1];
  490. var t = '';
  491. for (i = 0; i < l.length; i++) {
  492. t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? ',' : '');
  493. }
  494. return t.split('').reverse().join('') + '.' + r;
  495. }
  496. function strlen(str) {
  497. var len = 0;
  498. for (var i = 0; i < str.length; i++) {
  499. var c = str.charCodeAt(i);
  500. //单字节加1
  501. if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
  502. len++;
  503. } else {
  504. len += 2;
  505. }
  506. }
  507. return len;
  508. }
  509. </script>
  510. }
  511. <section style="display: none">
  512. <select id="hid-type">
  513. <option value=""></option>
  514. </select>
  515. @Html.DropDownList("hid-emergencyLevel", emergencyLevelList);
  516. @*@Html.DropDownList("hide-StoreHouses", storeHouses)*@
  517. </section>