OrderSendBillMg.cshtml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. @using System.Web.UI.HtmlControls
  2. @using ShwasherSys.Authorization.Permissions
  3. @using ShwasherSys.BasicInfo
  4. @using ShwasherSys.Models.Layout
  5. @using ShwasherSys.Views.Shared.New.Modals
  6. @{
  7. /**/
  8. ViewBag.ActiveMenu = PermissionNames.PagesSendGoodsOrderSendBillMg; //The menu item will be active for this page.
  9. ViewBag.Title = "发货单维护";
  10. List<SelectListItem> stickBillStatusList = new List<SelectListItem>()
  11. {
  12. new SelectListItem()
  13. {
  14. Value = "1",
  15. Text = "未对账"
  16. },
  17. new SelectListItem()
  18. {
  19. Value = "2",
  20. Text = "全部对账"
  21. },
  22. new SelectListItem()
  23. {
  24. Value = "3",
  25. Text = "部分对账"
  26. }
  27. };
  28. List<ExpressLogistics> expressList = ViewBag.ExpressList;
  29. List<SelectListItem> expressSelectList = new List<SelectListItem>();
  30. foreach(var e in expressList)
  31. {
  32. expressSelectList.Add(new SelectListItem(){Value = e.Id+"",Text=e.ExpressName});
  33. }
  34. var searchForm = new SearchFormViewModal(new List<SearchItem>()
  35. {
  36. new SearchItem("id", "发货单号"),
  37. new SearchItem("sendDate", "发货日期",FiledType.Dnull,ExpType.GreaterOrEqual),
  38. new SearchItem("sendDate", "到",FiledType.Dnull,ExpType.LessOrEqual),
  39. new SearchItem("customerId", "客户编号").SetSearchIcon("query_customer_modal"),
  40. new SearchItem("isbill", "开票状态").SetSearchItem(stickBillStatusList)
  41. }, false);
  42. }
  43. @section css{
  44. <link href="~/Content/Plugins/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css" rel="stylesheet" />
  45. <style>
  46. #tableToolExt {
  47. color: #fff;
  48. }
  49. #tableToolExt span {
  50. margin-left: 15px;
  51. }
  52. </style>
  53. }
  54. <div class="table-box mr-4 iwb-bootstrap-table">
  55. @Html.Action("ToolMenu", "Layout", new { pageName = ViewBag.ActiveMenu, searchForm })
  56. <table id="table"
  57. data-url="/api/services/app/OrderSendBill/GetAllView"
  58. data-striped="true" data-id-field="id" data-unique-id="id"
  59. data-method="post"
  60. data-side-pagination="server"
  61. data-content-type="application/x-www-form-urlencoded; charset=UTF-8"
  62. data-cache="false"
  63. 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"
  64. data-query-params="QueryParams"
  65. data-response-handler="ResponseHandler"
  66. data-click-to-select="true"
  67. data-single-select="true"
  68. data-show-jumpto="true">
  69. <thead>
  70. <tr class="row" id="header">
  71. <th data-field="state" data-checkbox="true"></th>
  72. <th data-align="center" data-field="isbill" data-formatter="IsBillFormatter">是否开票</th>
  73. <th data-align="center" data-field="id">发货单号</th>
  74. <th data-align="center" data-field="customerId">客户编号</th>
  75. <th data-align="center" data-field="sendDate">送货日期</th>
  76. <th data-align="center" data-field="contactMan">联系人</th>
  77. <th data-align="center" data-field="contactTels">联系电话</th>
  78. @*<th data-align="center" data-field="creatorUserId" data-formatter="CreatorUserIdFormatter">订单发货人</th>*@
  79. <th data-align="center" data-field="totalPrice">金额(含税)</th>
  80. <th data-align="center" data-field="afterTaxTotalPrice">金额(不含税)</th>
  81. <th data-align="center" data-field="currencyId">货币</th>
  82. <th data-align="center" data-field="expressName" data-formatter="ExpressFormatter">快递物流</th>
  83. </tr>
  84. </thead>
  85. </table>
  86. </div>
  87. @section modal
  88. {
  89. @{
  90. var modal = new ModalViewModel("物流信息","编辑", new ModalBodyViewModel(new List<Input>()
  91. {
  92. new InputHide("id"),
  93. new Input("expressId", "快递物流").SetSelectOptions(expressSelectList),
  94. new Input("expressBillNo", "物流单号"),
  95. }, "form-express"
  96. ),modalId:"modal-express"
  97. );
  98. }
  99. <section>
  100. @Html.Partial("New/Modals/_Modal", modal)
  101. @Html.Partial("Modals/Query/_Customer", "KeyWords-4")
  102. </section>
  103. }
  104. @section scripts
  105. {
  106. <script src="~/Content/Plugins/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js"></script>
  107. <script src="~/Content/Plugins/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.zh-CN.js"></script>
  108. <script>
  109. //var datePickerOpt = {
  110. // language: 'zh-CN',
  111. // format: "yyyy-mm-dd",
  112. // todayBtn: true,
  113. // autoclose: true,
  114. // startView: 2,
  115. // minView: 2,
  116. // maxView: 4
  117. // //showSecond: true,
  118. // //showHours: true,
  119. // //minuteStep: 10
  120. //};
  121. $(function() {
  122. //$("#KeyWords-2").datetimepicker(datePickerOpt);
  123. //$("#KeyWords-3").datetimepicker(datePickerOpt);
  124. //var nowDate = new Date();
  125. //var preDate = new Date(nowDate.getTime() - 30 * 24 * 60 * 60 * 1000);
  126. //$("#KeyWords-2").val(preDate.Format("yyyy-MM-dd"));
  127. //$("#KeyWords-3").val(nowDate.Format("yyyy-MM-dd"));
  128. LoadTable();
  129. QueryTotalPrice({
  130. MaxResultCount: 1,
  131. SkipCount: 0,
  132. Sorting: '', //排序列名
  133. sortOrder: '', //排位命令(desc,asc)
  134. SearchList: _searchList
  135. });
  136. funs["btnDelete"] = function(url) {
  137. BtnDelete(url);
  138. }
  139. /*$.extend(funs, { btnShow: function(url) {
  140. BtnShow(url);
  141. }
  142. });*/
  143. funs["btnShow"] = function(url) {
  144. BtnShow(url);
  145. }
  146. });
  147. function RefreshTable(table) {
  148. abp.ui.setBusy();
  149. var $thisTable = config.table;
  150. if (table) {
  151. if (typeof (table) === "string") {
  152. $thisTable = $("#" + table);
  153. } else {
  154. $thisTable = $(table);
  155. }
  156. }
  157. $thisTable.bootstrapTable("refresh", { silent: false });
  158. QueryTotalPrice({
  159. MaxResultCount: 1,
  160. SkipCount: 0,
  161. Sorting: '', //排序列名
  162. sortOrder: '', //排位命令(desc,asc)
  163. SearchList: _searchList
  164. });
  165. setTimeout(function() {
  166. abp.ui.clearBusy();
  167. _isSearching = false;
  168. },
  169. 8 * 1000);
  170. }
  171. function QueryTotalPrice(dataParam) {
  172. SaveAjax({
  173. url: window.appUrl + "OrderSendBill/GetAllPrice",
  174. //contentType: 'application/json',
  175. dataType: "json",
  176. data: dataParam,
  177. isAlert: false,
  178. isValidate: false,
  179. success: function(res) {
  180. if (res) {
  181. console.log('----', res);
  182. $('#tableToolExt').html(`<span>总金额:<i>${res[0]}</i></span><span>税后总金额:<i>${res[1]}</i></span>`);
  183. }
  184. }
  185. });
  186. }
  187. function BtnShow(url) {
  188. var rows = config.table.bootstrapTable("getSelections");
  189. if (rows.length === 1) {
  190. window.open("@Url.Action("OrderSendBillDetail")/" + rows[0].id, "_blank");
  191. } else
  192. abp.message.warn(abp.localization.localize("ChooseOneToOp"));
  193. }
  194. function BtnDelete(url) {
  195. var rows = config.table.bootstrapTable("getSelections");
  196. if (rows.length === 1) {
  197. abp.message.confirm("确认撤销此发货单?",
  198. "撤销发货单",
  199. function() {
  200. SaveAjax({ url: url, data: { Id: rows[0].id }, isValidate: false });
  201. });
  202. } else
  203. abp.message.warn(abp.localization.localize("ChooseOneToOp"));
  204. }
  205. function ExpressFormatter(v, r) {
  206. var str = '';
  207. if (v) {
  208. str = '<span class="table-action" onclick="ShowExpressProcess(\'' +
  209. r.expressId +
  210. '\',\'' +
  211. r.expressBillNo +
  212. '\')"><i class="iconfont icon-right"></i>' +
  213. r.expressName +
  214. '</span>';
  215. }
  216. str += `<span class="label label-info" onclick="f_modifyExpressInfo('${r.id}',${r.expressId},'${r.expressBillNo}')">编辑</span>`;
  217. return str;
  218. }
  219. function f_modifyExpressInfo(rId, expressId, expressBillNo) {
  220. OpenModal({
  221. url: window.appUrl + "OrderSendBill/UpdateExpressInfo",
  222. data: { id: rId, expressId: expressId, expressBillNo: expressBillNo},
  223. modal: $('#modal-express'),
  224. form: $('#form-express'),
  225. modaltitle:"编辑"
  226. });
  227. }
  228. function IsBillFormatter(v, r) {
  229. var str = '';
  230. if (r.orderSendCount > 0 && r.orderSendCount == r.statementCount) {
  231. str = '<span class="label label-info">全部对账</span>';
  232. }
  233. if (r.orderSendCount > r.statementCount) {
  234. str = '<span class="label label-info"> 部分对账</span>';
  235. }
  236. if (r.orderSendCount >= 0 && r.statementCount == 0) {
  237. str = '<span class="label label-danger">未对账</span>';
  238. }
  239. return str;
  240. }
  241. function CreatorUserIdFormatter(v, r) {
  242. var str = '';
  243. if (v) {
  244. let all = v.split(',');
  245. let nArr = Array.from(new Set(all));
  246. str = nArr.join(',');
  247. }
  248. return str;
  249. }
  250. function ShowExpressProcess(expressId, eBillNo) {
  251. if (expressId && eBillNo) {
  252. window.open("@Url.Action("ShowExpressProcess")?expressId=" + expressId + "&expressBillNo=" + eBillNo, "_blank");
  253. }
  254. }
  255. </script>
  256. <script>
  257. // 对Date的扩展,将 Date 转化为指定格式的String
  258. // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
  259. // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
  260. // 例子:
  261. // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
  262. // (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
  263. Date.prototype.Format = function(fmt) { //author: meizz
  264. var o = {
  265. "M+": this.getMonth() + 1, //月份
  266. "d+": this.getDate(), //日
  267. "h+": this.getHours(), //小时
  268. "m+": this.getMinutes(), //分
  269. "s+": this.getSeconds(), //秒
  270. "q+": Math.floor((this.getMonth() + 3) / 3), //季度
  271. "S": this.getMilliseconds() //毫秒
  272. };
  273. if (/(y+)/.test(fmt))
  274. fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  275. for (var k in o)
  276. if (new RegExp("(" + k + ")").test(fmt))
  277. fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  278. return fmt;
  279. }
  280. //将数字转换成金额显示 n是小数点后位数
  281. function toNumber(num, n) {
  282. var re = String(num);
  283. var dotfront = "";
  284. var dotlast = "";
  285. if (re.indexof('.') > -1) {
  286. var sarr = re.spilt('.');
  287. dotfront = sarr[0];
  288. dotlast = sarr[1];
  289. var dotlastlength = strlen(dotlast);
  290. if (dotlastlength < n) {
  291. for (var j = 0; j < n - dotlastlength; j++) {
  292. dotlast += "0";
  293. }
  294. }
  295. if (dotlastlength > n) {
  296. dotlast = dotlast.substr(0, n);
  297. }
  298. } else {
  299. dotfront = re;
  300. for (var i = 0; i < n; i++) {
  301. dotlast += "0";
  302. }
  303. }
  304. num = dotfront + '.' + dotlast;
  305. return num;
  306. }
  307. function _formatAmount(strData, n) {
  308. var CurrencyAndAmountRegExp = /^(\d{1,18})|(\d{1,18}\.)|(\d{1,17}\.\d{0,1})|(\d{1,16}\.\d{0,2})|(\.\d{1,2})$/;
  309. var _result = CurrencyAndAmountRegExp.test(strData);
  310. if (_result == false) {
  311. return strData;
  312. } // 一般来说最多就6位吧,当然如果有特殊需求可自行更改(`・∀・´)
  313. n = n > 0 && n <= 6 ? n : 2;
  314. var formatData = parseFloat((strData + '').replace(/[^\d\.-]/g, '')).toFixed(n) + '';
  315. var l = formatData.split('.')[0].split('').reverse();
  316. var r = formatData.split('.')[1];
  317. var t = '';
  318. for (i = 0; i < l.length; i++) {
  319. t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? ',' : '');
  320. }
  321. return t.split('').reverse().join('') + '.' + r;
  322. }
  323. function strlen(str) {
  324. var len = 0;
  325. for (var i = 0; i < str.length; i++) {
  326. var c = str.charCodeAt(i);
  327. //单字节加1
  328. if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
  329. len++;
  330. } else {
  331. len += 2;
  332. }
  333. }
  334. return len;
  335. }
  336. </script>
  337. }