Form.cshtml 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. @{
  2. ViewBag.Title = "订单表单";
  3. Layout = "~/Views/Shared/_OrderForm.cshtml";
  4. }
  5. <script>
  6. var keyValue = request('keyValue');
  7. $(function () {
  8. InitialPage();
  9. GetOrderEntryGrid();
  10. InitControl();
  11. });
  12. //初始化页面
  13. function InitialPage() {
  14. $(".bills").height($(window).height() - 88);
  15. //resize重设(表格、树形)宽高
  16. $(window).resize(function (e) {
  17. window.setTimeout(function () {
  18. $('#gridTable').setGridWidth(($('.gridPanel').width()));
  19. $(".bills").height($(window).height() - 88);
  20. }, 200);
  21. e.stopPropagation();
  22. });
  23. }
  24. //初始化控件
  25. function InitControl() {
  26. //客户名称
  27. $("#CustomerId").ComboBox({
  28. url: "../../CustomerManage/Customer/GetListJson",
  29. id: "CustomerId",
  30. text: "FullName",
  31. description: "==请选择==",
  32. height: "360px",
  33. width: "280px",
  34. allowSearch: true
  35. });
  36. //销售人员
  37. $("#SellerId").ComboBoxTree({
  38. url: "../../BaseManage/User/GetTreeJson",
  39. description: "==请选择==",
  40. height: "360px",
  41. width: "280px",
  42. allowSearch: true
  43. });
  44. //收款方式
  45. $("#PaymentMode").ComboBox({
  46. url: "../../SystemManage/DataItemDetail/GetDataItemListJson",
  47. param: { EnCode: "Client_PaymentMode" },
  48. id: "ItemValue",
  49. text: "ItemName",
  50. description: "==请选择==",
  51. height: "200px"
  52. });
  53. //获取表单
  54. if (!!keyValue) {
  55. $.SetForm({
  56. url: "../../CustomerManage/Order/GetFormJson",
  57. param: { keyValue: keyValue },
  58. success: function (data) {
  59. //主表
  60. var order = data.order;
  61. $("#form1").SetWebControls(order);
  62. $("#DiscountSum").val(toDecimal(order.DiscountSum));
  63. $("#Accounts").val(toDecimal(order.Accounts));
  64. $("#SaleCost").val(toDecimal(order.SaleCost));
  65. //明细
  66. var orderEntry = data.orderEntry;
  67. $("#gridTable").find('[role=row]').each(function (i) {
  68. var row = orderEntry[i - 1];
  69. if (row != undefined) {
  70. $(this).find('input[name="OrderEntryId"]').val(row.OrderEntryId);
  71. $(this).find('input[name="ProductName"]').val(row.ProductName);
  72. $(this).find('input[name="ProductCode"]').val(row.ProductCode);
  73. $(this).find('input[name="ProductId"]').val(row.ProductId);
  74. $(this).find('input[name="UnitId"]').val(row.UnitId);
  75. $(this).find('input[name="Qty"]').val(toDecimal(row.Qty));
  76. $(this).find('input[name="Price"]').val(toDecimal(row.Price));
  77. $(this).find('input[name="Amount"]').val(toDecimal(row.Amount));
  78. $(this).find('input[name="TaxRate"]').val(row.TaxRate);
  79. $(this).find('input[name="Taxprice"]').val(toDecimal(row.Taxprice));
  80. $(this).find('input[name="Tax"]').val(toDecimal(row.Tax));
  81. $(this).find('input[name="TaxAmount"]').val(toDecimal(row.TaxAmount));
  82. $(this).find('input[name="Description"]').val(row.Description);
  83. $(this).find('input').removeAttr('disabled').attr("isvalid", "yes");
  84. $(this).next().find('input').removeAttr('disabled');
  85. }
  86. });
  87. //合计
  88. var TotalQty = 0.00, TotalPrice = 0.00, TotalAmount = 0.00, TotalTaxprice = 0.00, TotalTax = 0.00, TotalTaxAmount = 0.00;
  89. $("#gridTable").find("tbody tr").each(function (i) {
  90. var Qty = $(this).find('td:eq(5)').find('input').val();
  91. if (Qty != "" && Qty != undefined) {
  92. TotalQty += Number(Qty);
  93. }
  94. var Price = $(this).find('td:eq(6)').find('input').val();
  95. if (Price != "" && Price != undefined) {
  96. TotalPrice += Number(Price);
  97. }
  98. var Amount = $(this).find('td:eq(7)').find('input').val();
  99. if (Amount != "" && Amount != undefined) {
  100. TotalAmount += Number(Amount);
  101. }
  102. var Taxprice = $(this).find('td:eq(9)').find('input').val();
  103. if (Taxprice != "" && Taxprice != undefined) {
  104. TotalTaxprice += Number(Taxprice);
  105. }
  106. var Tax = $(this).find('td:eq(10)').find('input').val();
  107. if (Tax != "" && Tax != undefined) {
  108. TotalTax += Number(Tax);
  109. }
  110. var TaxAmount = $(this).find('td:eq(11)').find('input').val();
  111. if (TaxAmount != "" && TaxAmount != undefined) {
  112. TotalTaxAmount += Number(TaxAmount);
  113. }
  114. });
  115. $("#TotalQty").text(toDecimal(TotalQty));
  116. $("#TotalPrice").text(toDecimal(TotalPrice));
  117. $("#TotalAmount").text(toDecimal(TotalAmount));
  118. $("#TotalTaxprice").text(toDecimal(TotalTaxprice));
  119. $("#TotalTax").text(toDecimal(TotalTax));
  120. $("#TotalTaxAmount").text(toDecimal(TotalTaxAmount));
  121. }
  122. });
  123. }
  124. }
  125. //加载明细
  126. function GetOrderEntryGrid() {
  127. var $grid = $("#gridTable");
  128. $grid.jqGrid({
  129. unwritten: false,
  130. datatype: "local",
  131. height: '100%',
  132. autowidth: true,
  133. colModel: [
  134. { label: '主键', name: 'OrderEntryId', hidden: true },
  135. { label: '商品名称<span class="label label label-default" style="margin-left:5px;">扫描枪录入</span>', name: "ProductName", width: 260, align: 'left', sortable: false, resizable: false },
  136. { label: '商品编号', name: "ProductCode", width: 100, align: 'center', sortable: false, resizable: false },
  137. { label: '单位', name: "UnitId", width: 100, align: 'center', sortable: false, resizable: false },
  138. { label: '数量', name: 'Qty', width: 80, align: 'center', sortable: false, resizable: false },
  139. { label: '单价', name: 'Price', width: 80, align: 'center', sortable: false, resizable: false },
  140. { label: '金额', name: 'Amount', width: 80, align: 'center', sortable: false, resizable: false },
  141. { label: '税率(%)', name: 'TaxRate', width: 80, align: 'center', sortable: false, resizable: false },
  142. { label: '含税单价', name: 'Taxprice', width: 80, align: 'center', sortable: false, resizable: false },
  143. { label: '税额', name: 'Tax', width: 80, align: 'center', sortable: false, resizable: false },
  144. { label: '含税金额', name: 'TaxAmount', width: 80, align: 'center', sortable: false, resizable: false },
  145. { label: '说明信息', name: 'Description', width: 200, align: 'left', sortable: false, resizable: false }
  146. ],
  147. pager: false,
  148. rownumbers: true,
  149. shrinkToFit: false,
  150. gridview: true,
  151. footerrow: true,
  152. gridComplete: function () {
  153. //合计
  154. $(this).footerData("set", {
  155. "UnitId": "合计:",
  156. "Qty": "<span id='TotalQty'>0.00</span>",
  157. "Price": "<span id='TotalPrice'>0.00</span>",
  158. "Amount": "<span id='TotalAmount'>0.00</span>",
  159. "Taxprice": "<span id='TotalTaxprice'>0.00</span>",
  160. "Tax": "<span id='TotalTax'>0.00</span>",
  161. "TaxAmount": "<span id='TotalTaxAmount'>0.00</span>"
  162. });
  163. $('table.ui-jqgrid-ftable td[aria-describedby="gridTable_UnitId"]').prevUntil().css("border-right-color", "#fff");
  164. }
  165. });
  166. //表头合并
  167. $grid.jqGrid('setGroupHeaders', {
  168. useColSpanStyle: true,
  169. groupHeaders: [
  170. { startColumnName: 'ProductName', numberOfColumns: 3, titleText: '商品信息' },
  171. { startColumnName: 'Qty', numberOfColumns: 7, titleText: '价格信息' }
  172. ]
  173. });
  174. //默认添加13行 空行
  175. for (var i = 1; i < 13; i++) {
  176. var rowdata = {
  177. OrderEntryId: '<input name="OrderEntryId" type="text" />',
  178. ProductName: '<div class="product"><input name="ProductName" readonly type="text" class="editable" isvalid="no" checkexpession="NotNull"/><span class="ui-icon-ellipsis"></span></div>',
  179. ProductCode: '<input name="ProductCode" type="text" class="editable center disabled" /><input name="ProductId" type="hidden" />',
  180. UnitId: '<input name="UnitId" type="text" class="editable center" />',
  181. Qty: '<input name="Qty" type="text" class="editable center decimal" isvalid="no" checkexpession="Double" />',
  182. Price: '<input name="Price" type="text" class="editable center decimal" isvalid="no" checkexpession="Double" />',
  183. Amount: '<input name="Amount" type="text" class="editable center decimal disabled" isvalid="no" checkexpession="Double" />',
  184. TaxRate: '<input name="TaxRate" type="text" class="editable center decimal" isvalid="no" checkexpession="Double" />',
  185. Taxprice: '<input name="Taxprice" type="text" class="editable center decimal" isvalid="no" checkexpession="Double" />',
  186. Tax: '<input name="Tax" type="text" class="editable center decimal disabled" isvalid="no" checkexpession="Double" />',
  187. TaxAmount: '<input name="TaxAmount" type="text" class="editable center decimal disabled" isvalid="no" checkexpession="Double" />',
  188. Description: '<input name="Description" type="text" class="editable" />',
  189. }
  190. $grid.jqGrid('addRowData', i, rowdata);
  191. };
  192. $grid.find('.decimal').attr('onfocus', 'IsMoney(this.id)');
  193. $grid.find('input').attr("disabled", "disabled");
  194. $grid.find("tbody tr:eq(1)").find('input').removeAttr('disabled').attr("isvalid", "yes");
  195. $grid.find('.disabled').attr("disabled", "disabled");
  196. //商品名称事件
  197. $('input[name="ProductName"]').focus(function () {
  198. $('.ui-icon-ellipsis').hide();
  199. $(this).next('.ui-icon-ellipsis').show();
  200. $(this).Contextmenu();
  201. });
  202. //选择商品事件
  203. $('.ui-icon-ellipsis').click(function () {
  204. var $ellipsis = $(this);
  205. dialogOpen({
  206. id: "OptionProduct",
  207. title: '选择商品',
  208. url: '/CustomerManage/Order/OptionProduct',
  209. width: "600px",
  210. height: "400px",
  211. callBack: function (iframeId) {
  212. top.frames[iframeId].AcceptClick(function (data) {
  213. if ($grid.find('[role=row]').find('[data-value=' + data.ProductId + ']').length == 0) {
  214. $ellipsis.parents('[role=row]').find('input[name="ProductName"]').val(data.ProductName);
  215. $ellipsis.parents('[role=row]').find('input[name="ProductCode"]').val(data.ProductCode).attr('data-value', data.ProductId);
  216. $ellipsis.parents('[role=row]').find('input[name="ProductId"]').val(data.ProductId);
  217. $ellipsis.parents('[role=row]').find('input[name="Qty"]').val('1.00');
  218. $ellipsis.parents('[role=row]').find('input[name="Price"]').val('0.00');
  219. $ellipsis.parents('[role=row]').find('input[name="Amount"]').val('0.00');
  220. $ellipsis.parents('[role=row]').find('input[name="TaxRate"]').val('0.00');
  221. $ellipsis.parents('[role=row]').find('input[name="Taxprice"]').val('0.00');
  222. $ellipsis.parents('[role=row]').find('input[name="Tax"]').val('0.00');
  223. $ellipsis.parents('[role=row]').find('input[name="TaxAmount"]').val('0.00');
  224. $ellipsis.parents('[role=row]').find('input').removeAttr('disabled').attr("isvalid", "yes");
  225. $ellipsis.parents('[role=row]').next().find('input').removeAttr('disabled');
  226. } else {
  227. top.dialogTop('商品信息已存在,不能重复添加', 'error');
  228. }
  229. });
  230. },
  231. btn: ['确认选中', '关闭']
  232. });
  233. });
  234. //价格文本框事件
  235. $grid.find('.decimal').click(function () {
  236. $(this).select();
  237. });
  238. //价格文本框换算
  239. $grid.find('.decimal').keyup(function () {
  240. var _inputName = $(this).attr('name');
  241. var $Qty = $(this).parents('[role=row]').find('input[name="Qty"]'); //数量
  242. var $Price = $(this).parents('[role=row]').find('input[name="Price"]'); //单价
  243. var $Amount = $(this).parents('[role=row]').find('input[name="Amount"]'); //金额
  244. var $TaxRate = $(this).parents('[role=row]').find('input[name="TaxRate"]'); //税率(%)
  245. var $Taxprice = $(this).parents('[role=row]').find('input[name="Taxprice"]'); //含税单价
  246. var $Tax = $(this).parents('[role=row]').find('input[name="Tax"]'); //税额
  247. var $TaxAmount = $(this).parents('[role=row]').find('input[name="TaxAmount"]'); //含税金额
  248. if (_inputName == "Taxprice") {
  249. //单价 * (1 + (税率 / 100))=含税单价
  250. $Price.val(toDecimal($Taxprice.val() / (1 + ($TaxRate.val() / 100))));
  251. } else {
  252. //单价 * (1 + (税率 / 100))=含税单价
  253. $Taxprice.val(toDecimal($Price.val() * (1 + ($TaxRate.val() / 100))));
  254. }
  255. //数量*单价=金额
  256. $Amount.val(toDecimal($Qty.val() * $Price.val()));
  257. //(含税单价-单价)*数量=税额
  258. $Tax.val(toDecimal(($Taxprice.val() - $Price.val()) * $Qty.val()));
  259. //数量*含税单价=含税金额
  260. $TaxAmount.val(toDecimal($Qty.val() * $Taxprice.val()));
  261. //合计
  262. var TotalQty = 0.00, TotalPrice = 0.00, TotalAmount = 0.00, TotalTaxprice = 0.00, TotalTax = 0.00, TotalTaxAmount = 0.00;
  263. $grid.find("tbody tr").each(function (i) {
  264. var Qty = $(this).find('td:eq(5)').find('input').val();
  265. if (Qty != "" && Qty != undefined) {
  266. TotalQty += Number(Qty);
  267. }
  268. var Price = $(this).find('td:eq(6)').find('input').val();
  269. if (Price != "" && Price != undefined) {
  270. TotalPrice += Number(Price);
  271. }
  272. var Amount = $(this).find('td:eq(7)').find('input').val();
  273. if (Amount != "" && Amount != undefined) {
  274. TotalAmount += Number(Amount);
  275. }
  276. var Taxprice = $(this).find('td:eq(9)').find('input').val();
  277. if (Taxprice != "" && Taxprice != undefined) {
  278. TotalTaxprice += Number(Taxprice);
  279. }
  280. var Tax = $(this).find('td:eq(10)').find('input').val();
  281. if (Tax != "" && Tax != undefined) {
  282. TotalTax += Number(Tax);
  283. }
  284. var TaxAmount = $(this).find('td:eq(11)').find('input').val();
  285. if (TaxAmount != "" && TaxAmount != undefined) {
  286. TotalTaxAmount += Number(TaxAmount);
  287. }
  288. });
  289. $("#TotalQty").text(toDecimal(TotalQty));
  290. $("#TotalPrice").text(toDecimal(TotalPrice));
  291. $("#TotalAmount").text(toDecimal(TotalAmount));
  292. $("#TotalTaxprice").text(toDecimal(TotalTaxprice));
  293. $("#TotalTax").text(toDecimal(TotalTax));
  294. $("#TotalTaxAmount").text(toDecimal(TotalTaxAmount));
  295. });
  296. }
  297. //保存表单
  298. function AcceptClick(save_Mode) {
  299. if (!$('#form1').Validform()) {
  300. return false;
  301. }
  302. var OrderEntryJson = [];
  303. $("#gridTable").find('[role=row]').each(function (i) {
  304. if (!!$(this).find('input[name="ProductId"]').val()) {
  305. OrderEntryJson.push({
  306. OrderEntryId: $(this).find('input[name="OrderEntryId"]').val(),
  307. ProductName: $(this).find('input[name="ProductName"]').val(),
  308. ProductCode: $(this).find('input[name="ProductCode"]').val(),
  309. ProductId: $(this).find('input[name="ProductId"]').val(),
  310. UnitId: $(this).find('input[name="UnitId"]').val(),
  311. Qty: $(this).find('input[name="Qty"]').val(),
  312. Price: $(this).find('input[name="Price"]').val(),
  313. Amount: $(this).find('input[name="Amount"]').val(),
  314. TaxRate: $(this).find('input[name="TaxRate"]').val(),
  315. Taxprice: $(this).find('input[name="Taxprice"]').val(),
  316. Tax: $(this).find('input[name="Tax"]').val(),
  317. TaxAmount: $(this).find('input[name="TaxAmount"]').val(),
  318. Description: $(this).find('input[name="Description"]').val(),
  319. SortCode: i
  320. });
  321. }
  322. });
  323. var postData = $("#form1").GetWebControls(keyValue);
  324. postData["CustomerName"] = $("#CustomerId").attr('data-text');
  325. postData["SellerName"] = $("#SellerId").attr('data-text');
  326. postData["orderEntryJson"] = JSON.stringify(OrderEntryJson);
  327. $.ConfirmAjax({
  328. msg: "注:您确认要保存此操作吗?",
  329. url: "../../CustomerManage/Order/SaveForm?keyValue=" + keyValue,
  330. param: postData,
  331. success: function (data) {
  332. if (save_Mode == 1) {
  333. reload();
  334. } else {
  335. top.$.removeTab('closeCurrent');
  336. }
  337. }
  338. });
  339. }
  340. </script>
  341. <div class="bills">
  342. <table class="form" style="width: 100%; margin-bottom: 10px;">
  343. <tr>
  344. <th class="formTitle" style="width: 60px;">客户名称<font face="宋体">*</font></th>
  345. <td class="formValue">
  346. <div id="CustomerId" type="select" class="ui-select" isvalid="yes" checkexpession="NotNull"></div>
  347. </td>
  348. <th class="formTitle">销售人员<font face="宋体">*</font></th>
  349. <td class="formValue">
  350. <div id="SellerId" type="selectTree" class="ui-select" isvalid="yes" checkexpession="NotNull"></div>
  351. </td>
  352. <th class="formTitle">单据日期<font face="宋体">*</font></th>
  353. <td class="formValue">
  354. <input id="OrderDate" type="text" value="@LeaRun.Util.Time.GetToday()" class="form-control input-wdatepicker" onfocus="WdatePicker({maxDate:'%y-%M-%d'})" isvalid="yes" checkexpession="NotNull"/>
  355. </td>
  356. <th class="formTitle">单据编号<font face="宋体">*</font></th>
  357. <td class="formValue">
  358. <input id="OrderCode" type="text" readonly value="@ViewBag.OrderCode" class="form-control" isvalid="yes" checkexpession="NotNull"/>
  359. </td>
  360. </tr>
  361. </table>
  362. <div class="gridPanel">
  363. <table id="gridTable"></table>
  364. </div>
  365. <textarea id="Description" placeholder="暂无备注信息" class="form-control" style="width: 100%; height: 50px; margin-top: 10px;"></textarea>
  366. <table class="form" style="width: 100%; margin-top: 5px;">
  367. <tr>
  368. <th class="formTitle" style="width: 60px;">优惠金额<font face="宋体">*</font></th>
  369. <td class="formValue">
  370. <input id="DiscountSum" type="text" class="form-control" value="0.00" isvalid="yes" checkexpession="Double" />
  371. </td>
  372. <th class="formTitle">收款金额<font face="宋体">*</font></th>
  373. <td class="formValue">
  374. <input id="Accounts" type="text" class="form-control" value="0.00" isvalid="yes" checkexpession="Double" />
  375. </td>
  376. <th class="formTitle">收款日期<font face="宋体">*</font></th>
  377. <td class="formValue">
  378. <input id="PaymentDate" type="text" class="form-control input-wdatepicker" onfocus="WdatePicker()" isvalid="yes" checkexpession="NotNull" />
  379. </td>
  380. <th class="formTitle">收款方式<font face="宋体">*</font></th>
  381. <td class="formValue">
  382. <div id="PaymentMode" type="select" class="ui-select" isvalid="yes" checkexpession="NotNull"></div>
  383. </td>
  384. </tr>
  385. <tr>
  386. <th class="formTitle" style="width: 60px;">销售费用<font face="宋体">*</font></th>
  387. <td class="formValue">
  388. <input id="SaleCost" type="text" class="form-control" value="0.00" isvalid="yes" checkexpession="Double" />
  389. </td>
  390. <th class="formTitle">制单人员<font face="宋体">*</font></th>
  391. <td class="formValue">
  392. <input id="CreateUserName" type="text" class="form-control" readonly value="@LeaRun.Application.Code.OperatorProvider.Provider.Current().UserName" /></td>
  393. <th class="formTitle">合同编号</th>
  394. <td class="formValue">
  395. <input id="ContractCode" type="text" class="form-control" />
  396. </td>
  397. <th class="formTitle">合同附件</th>
  398. <td class="formValue">
  399. <input id="ContractFile" type="text" class="form-control" />
  400. </td>
  401. </tr>
  402. <tr>
  403. <th class="formTitle">摘要信息</th>
  404. <td class="formValue" colspan="7">
  405. <input id="AbstractInfo" type="text" class="form-control" />
  406. </td>
  407. </tr>
  408. </table>
  409. </div>
  410. <div id="bottomField">
  411. <a id="savaAndAdd" class="btn btn-success" onclick="AcceptClick(1)">保存并新增</a>
  412. <a id="save" class="btn btn-default" onclick="AcceptClick(2)">保存单据</a>
  413. </div>
  414. <div class="contextmenu">
  415. <ul>
  416. <li>添加一行</li>
  417. <li>删除一行</li>
  418. </ul>
  419. </div>