OrderQueryMg.cshtml 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. @using System.Web.UI.HtmlControls
  2. @using ShwasherSys.Authorization.Permissions
  3. @using ShwasherSys.Models.Layout
  4. @using ShwasherSys.Models.Modal
  5. @{
  6. /**/
  7. ViewBag.ActiveMenu = PermissionNames.PagesOrderInfoOrderQueryMg; //The menu item will be active for this page.
  8. ViewBag.Title = "订单明细查询";
  9. List<SelectListItem> OrderStatusList = ViewBag.OrderStatus;
  10. List<SelectListItem> OrderItemStatusList = ViewBag.OrderItemStatus;
  11. bool isCanViewPrice = IsGranted(PermissionNames.PagesOrderInfoOrderMgQueryOrderPrice);
  12. List<SelectListItem> OrderSaleTypeList = ViewBag.OrderSaleType;
  13. var searchList = new List<SearchItem>()
  14. {
  15. new SearchItem("orderNo", "流水号"),
  16. new SearchItem("orderDate", "订单日期", FiledType.Dnull, ExpType.GreaterOrEqual),
  17. new SearchItem("orderDate", "到", FiledType.Dnull, ExpType.LessOrEqual),
  18. new SearchItem("customerId", "客户编号").SetSearchIcon("query_customer_modal"),
  19. new SearchItem("stockNo", "客户订单号"),
  20. new SearchItem("productName", "产品名称"),
  21. new SearchItem("model", "规格"),
  22. new SearchItem("material", "材质"),
  23. new SearchItem("sendDate", "送货日期", FiledType.D, ExpType.GreaterOrEqual),
  24. new SearchItem("sendDate", "到", FiledType.D, ExpType.LessOrEqual),
  25. new SearchItem("saleType", "内销/外销", FiledType.Inull, ExpType.Equal).SetSearchItem(OrderSaleTypeList),
  26. new SearchItem("orderItemStatusId", "明细状态", FiledType.Inull, ExpType.Equal).SetSearchItem(OrderItemStatusList),
  27. new SearchItem("partNo", "零件号"),
  28. new SearchItem("surfaceColor", "表色"),
  29. new SearchItem("productNo", "产品编码"),
  30. };
  31. //if (isCanViewPrice)
  32. //{
  33. // searchList.AddRange(new List<SearchItem>()
  34. // {
  35. // new SearchItem("totalPrice", "含税金额", FiledType.Dec, ExpType.GreaterOrEqual),
  36. // new SearchItem("totalPrice", "到", FiledType.Dec, ExpType.LessOrEqual),
  37. // new SearchItem("afterTaxTotalPrice", "税前金额", FiledType.Dec, ExpType.GreaterOrEqual),
  38. // new SearchItem("afterTaxTotalPrice", "到", FiledType.Dec, ExpType.LessOrEqual),
  39. // new SearchItem("price", "含税单价", FiledType.Dec, ExpType.GreaterOrEqual),
  40. // new SearchItem("price", "到", FiledType.Dec, ExpType.LessOrEqual),
  41. // new SearchItem("afterTaxPrice", "税前单价", FiledType.Dec, ExpType.GreaterOrEqual),
  42. // new SearchItem("afterTaxPrice", "到", FiledType.Dec, ExpType.LessOrEqual),
  43. // });
  44. //}
  45. var searchForm = new SearchFormViewModal(searchList, false);
  46. }
  47. @section css{
  48. <link href="~/Content/Plugins/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css" rel="stylesheet" />
  49. }
  50. <div class="table-box mr-4 iwb-bootstrap-table">
  51. @Html.Action("ToolMenu", "Layout", new { pageName = ViewBag.ActiveMenu, searchForm })
  52. <table id="table"
  53. data-url="/api/services/app/OrderItems/GetViewAll"
  54. data-striped="true" data-id-field="id" data-unique-id="id"
  55. data-method="post"
  56. data-side-pagination="server"
  57. data-content-type="application/x-www-form-urlencoded; charset=UTF-8"
  58. data-cache="false"
  59. 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"
  60. data-query-params="QueryParams"
  61. data-response-handler="ResponseHandler"
  62. data-click-to-select="true"
  63. data-single-select="true"
  64. data-show-jumpto="true">
  65. <thead>
  66. <tr class="row" id="header">
  67. <th data-field="state" data-checkbox="true"></th>
  68. <th data-align="center" data-field="orderNo" data-width="100">订单流水号</th>
  69. <th data-align="center" data-field="stockNo">客户订单号</th>
  70. <th data-align="center" data-field="customerName">客户</th>
  71. <th data-align="center" data-field="orderItemStatusName" data-formatter="OrderItemStatusFormatter">状态</th>
  72. <th data-align="center" data-field="productNo">产品编号</th>
  73. <th data-align="center" data-field="productName">产品名称</th>
  74. <th data-align="center" data-field="quantity" data-formatter="QuantityFormatter">数量</th>
  75. <th data-align="center" data-field="isSendQuantity">已发数量</th>
  76. <th data-align="center" data-field="remainingQuantity">剩余数</th>
  77. @*<th data-align="center" data-field="orderUnitName">单位</th>*@
  78. @if (isCanViewPrice)
  79. {
  80. <th data-align="center" data-field="price" data-formatter="TotalPriceFormatter">含税单价</th>
  81. <th data-align="center" data-field="afterTaxPrice" data-formatter="TotalPriceFormatter">不含税单价</th>
  82. <th data-align="center" data-field="totalPrice" data-formatter="TotalPriceFormatter">含税总价</th>
  83. <th data-align="center" data-field="afterTaxTotalPrice" data-formatter="TotalPriceFormatter">不含税总价</th>
  84. <th data-align="center" data-field="currencyId">货币</th>
  85. }
  86. <th data-align="center" data-field="sendDate" data-formatter="SendDateFormatter">送货日期</th>
  87. @*<th data-align="center" data-field="isReport" data-formatter="IsReportFormatter">检验报告</th>*@
  88. @*<th data-align="center" data-field="isPartSend" data-formatter="IsPartSendFormatter">部分送货</th>*@
  89. <th data-align="center" data-field="model">型号</th>
  90. <th data-align="center" data-field="surfaceColor">表色</th>
  91. <th data-align="center" data-field="material">材质</th>
  92. <th data-align="center" data-field="rigidity">硬度</th>
  93. <th data-align="center" data-field="saleType" data-formatter="SaleTypeFormatter">外销/内销</th>
  94. <th data-align="center" data-field="partNo">零件号</th>
  95. <th data-align="center" data-field="timeCreated">创建日期</th>
  96. </tr>
  97. </thead>
  98. </table>
  99. </div>
  100. @section modal{
  101. <section>
  102. @*@Html.Hidden("isForSearch", "0");*@
  103. @Html.Partial("Modals/Query/_Customer", "customerId|KeyWords-4")
  104. </section>
  105. }
  106. @section scripts
  107. {
  108. <script src="~/Content/Plugins/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js"></script>
  109. <script src="~/Content/Plugins/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.zh-CN.js"></script>
  110. <script type="text/javascript">
  111. //cId cStockNo cOrderStatusId cCustomerId cStartDate cEndDate
  112. var datePickerOpt = {
  113. language: 'zh-CN',
  114. format: "yyyy-mm-dd",
  115. todayBtn: true,
  116. autoclose: true,
  117. startView: 2,
  118. minView: 2,
  119. maxView: 4
  120. //showSecond: true,
  121. //showHours: true,
  122. //minuteStep: 10
  123. };
  124. $(function () {
  125. //show完毕前执行
  126. //$("#KeyWords-2").datetimepicker(datePickerOpt);
  127. //$("#KeyWords-3").datetimepicker(datePickerOpt);
  128. //$("#KeyWords-9").datetimepicker(datePickerOpt);
  129. //$("#KeyWords-10").datetimepicker(datePickerOpt);
  130. var nowDate = new Date();
  131. var preDate = new Date(nowDate.getTime() - 7 * 24 * 60 * 60 * 1000);
  132. $("#KeyWords-2").val(preDate.Format("yyyy-MM-dd"));
  133. $("#KeyWords-3").val(nowDate.Format("yyyy-MM-dd"));
  134. LoadTable();
  135. //LoadQueryCustomerTable();
  136. var funs = window.funs || { none: function () { console.log("No type"); } };
  137. //funs["btnUpdate"] = function () { BtnUpdate({ readonly: "standardName" }); };
  138. funs["btnExportExcel"] = function(url) {
  139. BtnExportExcel(url);
  140. }
  141. /*funs["btnCreate"] = function () {
  142. abp.ajax({
  143. url: window.appUrl + 'OrderHeaders/GetNewOrderNo',
  144. async: true,
  145. type: "Post",
  146. contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
  147. isValidate: false,
  148. dataType: "json",
  149. success: function (res) {
  150. BtnCreate({ readonly: "id,sendAdress,customerId ", disabled: "orderStatusId", data: { orderStatusId: "2", id: res, orderDate: GetNowFormatDate() } });
  151. //$("#OrderStatusId").val("2").select2();
  152. }
  153. });
  154. }
  155. */
  156. });
  157. function BtnExportExcel(url) {
  158. GetSearchList();
  159. console.log(_searchList);
  160. abp.ajax({
  161. url: url,
  162. async: true,
  163. data: JSON.stringify(_searchList),
  164. type: "Post",
  165. contentType: 'application/json',
  166. isValidate: false,
  167. dataType: "json",
  168. success: function (res) {
  169. window.location.href = "/"+res;
  170. }
  171. });
  172. /*SaveAjax({
  173. url: url,
  174. data: _searchList,
  175. isValidate: false,
  176. isAlert: false,
  177. success: function(res) {
  178. window.location.href = res;
  179. }
  180. });*/
  181. }
  182. //function GetSearchList() {
  183. // var count = $("#SearchForm").find(".KeyWords").length;
  184. // window._searchList = [];
  185. // for (var i = 1; i <= count; i++) {
  186. // var keyWords = $("#KeyWords-" + i).val();
  187. // var keyField = $("#KeyField-" + i).val();
  188. // if (keyWords) {
  189. // var fieldType = $("#FieldType-" + i).val();
  190. // var expType = $("#ExpType-" + i).val();
  191. // if (fieldType === "5" && expType === "5") {
  192. // var endDate = new Date(keyWords);
  193. // var qDate = new Date(endDate.getTime() + 24 * 60 * 60 * 1000);
  194. // keyWords = qDate.Format("yyyy-MM-dd");
  195. // }
  196. // _searchList.push({ KeyWords: keyWords, KeyField: keyField, FieldType: fieldType, ExpType: expType });
  197. // }
  198. // }
  199. //}
  200. function OrderItemStatusFormatter(v, r) {
  201. if (r.orderItemStatusId === 15) {
  202. return '<span class="label label-success">完成审核</span>';
  203. } else if (r.orderItemStatusId === 9) {
  204. return '<span class="label label-danger">发货</span>';
  205. } else if (r.orderItemStatusId === 11) {
  206. return '<span class="label label-primary">结束</span>';
  207. }
  208. return v;
  209. }
  210. function IsReportFormatter(v, r) {
  211. var str = "";
  212. if (v === "Y") {
  213. str = '<span class="table-action">需要</span>';
  214. } else if (v === "N") {
  215. str = '<span class="table-action">不需要</span>';;
  216. }
  217. return str;
  218. }
  219. function SaleTypeFormatter(v, r) {
  220. var str = "";
  221. if (v === 1) {
  222. str = '<span class="table-action">内销</span>';
  223. } else if (v === 2) {
  224. str = '<span class="table-action">外销</span>';;
  225. }else if (v === 3) {
  226. str = '<span class="table-action">换货</span>';;
  227. }
  228. return str;
  229. }
  230. function SendDateFormatter(v, r) {
  231. var dataNow = abp.clock.now();
  232. var sendDate = new Date(v);
  233. var s1 = dataNow.getTime(), s2 = sendDate.getTime();
  234. var span = (s2 - s1) / 1000;
  235. var dayspan = parseInt(span / (24 * 60 * 60));
  236. if (dayspan < 0) {
  237. return '<span style="text-decoration:underline;color:#ff0000" >' + sendDate.Format('yyyy-MM-dd') + '</span>';
  238. }
  239. if (dayspan > -1 && dayspan < 4) {
  240. return '<span style="text-decoration:underline;color:#dd4b39" >' + sendDate.Format('yyyy-MM-dd') + '</span>';
  241. }
  242. return '<span style="text-decoration:underline;" >' + sendDate.Format('yyyy-MM-dd') + '</span>';
  243. }
  244. function QuantityFormatter(v, r) {
  245. var str = '<span style="text-decoration:underline;" >' + v + '</span>';
  246. return str;
  247. }
  248. function TotalPriceFormatter(v, r) {
  249. var str = "0.00";
  250. if (v && v > 0) {
  251. v = (v * 10000) / 10000;
  252. str = _formatAmount(v, 4);
  253. }
  254. str = '<span style="text-decoration:underline;">' + str + ' </span>';
  255. return str;
  256. }
  257. function IsPartSendFormatter(v, r) {
  258. var str = "";
  259. if (v === "Y") {
  260. str = '<span class="table-action">是</span>';
  261. } else if (v === "N") {
  262. str = '<span class="table-action">否</span>';;
  263. }
  264. return str;
  265. }
  266. </script>
  267. <script>
  268. // 对Date的扩展,将 Date 转化为指定格式的String
  269. // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
  270. // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
  271. // 例子:
  272. // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
  273. // (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
  274. Date.prototype.Format = function (fmt) { //author: meizz
  275. var o = {
  276. "M+": this.getMonth() + 1, //月份
  277. "d+": this.getDate(), //日
  278. "h+": this.getHours(), //小时
  279. "m+": this.getMinutes(), //分
  280. "s+": this.getSeconds(), //秒
  281. "q+": Math.floor((this.getMonth() + 3) / 3), //季度
  282. "S": this.getMilliseconds() //毫秒
  283. };
  284. if (/(y+)/.test(fmt))
  285. fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  286. for (var k in o)
  287. if (new RegExp("(" + k + ")").test(fmt))
  288. fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  289. return fmt;
  290. }
  291. //将数字转换成金额显示 n是小数点后位数
  292. function toNumber(num, n) {
  293. var re = String(num);
  294. var dotfront = "";
  295. var dotlast = "";
  296. if (re.indexof('.') > -1) {
  297. var sarr = re.spilt('.');
  298. dotfront = sarr[0];
  299. dotlast = sarr[1];
  300. var dotlastlength = strlen(dotlast);
  301. if (dotlastlength < n) {
  302. for (var j = 0; j < n - dotlastlength; j++) {
  303. dotlast += "0";
  304. }
  305. }
  306. if (dotlastlength > n) {
  307. dotlast = dotlast.substr(0, n);
  308. }
  309. } else {
  310. dotfront = re;
  311. for (var i = 0; i < n; i++) {
  312. dotlast += "0";
  313. }
  314. }
  315. num = dotfront + '.' + dotlast;
  316. return num;
  317. }
  318. function _formatAmount(strData, n) {
  319. var CurrencyAndAmountRegExp = /^(\d{1,18})|(\d{1,18}\.)|(\d{1,17}\.\d{0,1})|(\d{1,16}\.\d{0,2})|(\.\d{1,2})$/;
  320. var _result = CurrencyAndAmountRegExp.test(strData);
  321. if (_result == false) {
  322. return strData;
  323. } // 一般来说最多就6位吧,当然如果有特殊需求可自行更改(`・∀・´)
  324. n = n > 0 && n <= 6 ? n : 2;
  325. var formatData = parseFloat((strData + '').replace(/[^\d\.-]/g, '')).toFixed(n) + '';
  326. var l = formatData.split('.')[0].split('').reverse();
  327. var r = formatData.split('.')[1];
  328. var t = '';
  329. for (i = 0; i < l.length; i++) {
  330. t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? ',' : '');
  331. }
  332. return t.split('').reverse().join('') + '.' + r;
  333. }
  334. function strlen(str) {
  335. var len = 0;
  336. for (var i = 0; i < str.length; i++) {
  337. var c = str.charCodeAt(i);
  338. //单字节加1
  339. if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
  340. len++;
  341. }
  342. else {
  343. len += 2;
  344. }
  345. }
  346. return len;
  347. }
  348. </script>
  349. }