OrderMg.cshtml 50 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186
  1. @using System.Web.UI.HtmlControls
  2. @using Abp.Authorization
  3. @using IwbZero.Session
  4. @using ShwasherSys
  5. @using ShwasherSys.Authorization.Permissions
  6. @using ShwasherSys.BasicInfo
  7. @using ShwasherSys.Models.Layout
  8. @using ShwasherSys.Models.Modal
  9. @using ShwasherSys.Views.Shared.New.Table
  10. @{
  11. /**/
  12. ViewBag.ActiveMenu = PermissionNames.PagesOrderInfoOrderMg; //The menu item will be active for this page.
  13. ViewBag.Title = "订单维护";
  14. bool isCanViewPrice = IsGranted(PermissionNames.PagesOrderInfoOrderMgQueryOrderPrice);
  15. List<SelectListItem> OrderStatusList = ViewBag.OrderStatus;
  16. List<SelectListItem> OrderItemStatusList = ViewBag.OrderItemStatus;
  17. List<Currency> loCurrencies = ViewBag.FromCurrenyId;
  18. List<CurrencyExchangeRate> loToCNYCurrenyRate = ViewBag.ToCNYCurreny;
  19. List<SelectListItem> emergencyLevelList = ViewBag.EmergencyLevel;
  20. List<SelectListItem> productionOrderStatus = ViewBag.ProductionOrderStatus;
  21. string strCurrencies = "";
  22. if (loCurrencies != null)
  23. {
  24. foreach (var loCurrency in loCurrencies)
  25. {
  26. if (loCurrency.Id == "CNY")
  27. {
  28. strCurrencies += "<option value=\"" + loCurrency.Id + "\" selected=\"selected\">" + loCurrency.CurrencyName + "</option>";
  29. }
  30. else
  31. {
  32. strCurrencies += "<option value=\"" + loCurrency.Id + "\">" + loCurrency.CurrencyName + "</option>";
  33. }
  34. }
  35. }
  36. List<SelectListItem> OrderSaleTypeList = ViewBag.OrderSaleType;
  37. var searchForm = new SearchFormViewModal(new List<SearchItem>()
  38. {
  39. new SearchItem("id", "流水号"),
  40. new SearchItem("orderDate", "订单日期",FiledType.D,ExpType.Greater),
  41. new SearchItem("orderDate", "到",FiledType.D,ExpType.LessOrEqual),
  42. new SearchItem("customerId", "客户编号").SetSearchIcon("query_customer_modal"),
  43. new SearchItem("stockNo", "客户订单号"),
  44. new SearchItem("orderStatusId", "状态",FiledType.I,ExpType.Equal).SetSearchItem(OrderStatusList),
  45. new SearchItem("saleMan", "业务员",showField:"saleManName").SetSearchIcon("query_employee_modal","SearchForm") ,
  46. }, false);
  47. }
  48. @section css{
  49. <link href="~/Content/Plugins/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css" rel="stylesheet" />
  50. <link href="~/Views/OrderInfo/css/OrderMg.css" rel="stylesheet" />
  51. <style>
  52. .store-query > strong {
  53. width: 70px;
  54. text-align: right;
  55. }
  56. #storeQuantity, #orderQuantity {
  57. padding: 0 5px;
  58. color: red;
  59. }
  60. .store_box {
  61. position: absolute;
  62. z-index: 10001;
  63. width: 400px;
  64. background: rgba(209,220,249,.9);
  65. display: none;
  66. font-size: 1rem;
  67. padding: 5px;
  68. font-family: "iconfont" !important;
  69. }
  70. .store_box:before {
  71. content: "\e616";
  72. position: absolute;
  73. top: -12px;
  74. left: 3px;
  75. color: rgba(209, 220, 249, .9);
  76. }
  77. .store_box .close {
  78. position: absolute;
  79. width: 20px;
  80. height: 20px;
  81. right: -8px;
  82. top: -8px;
  83. color: #000;
  84. border-radius: 50%;
  85. border: 2px solid #000;
  86. display: flex;
  87. justify-content: center;
  88. align-items: center;
  89. }
  90. .tool-rc-group {
  91. border: 0px solid #ba63d3;
  92. float: left;
  93. margin: 0 5px;
  94. padding-right: 5px;
  95. border-radius: 5px;
  96. }
  97. </style>
  98. }
  99. <div class="table-box mr-4 iwb-bootstrap-table">
  100. @Html.Action("ToolMenu", "Layout", new { pageName = ViewBag.ActiveMenu, searchForm })
  101. <table id="table"
  102. data-url="/api/services/app/OrderHeaders/GetAll"
  103. data-striped="true" data-id-field="id" data-unique-id="id"
  104. data-method="post"
  105. data-side-pagination="server"
  106. data-content-type="application/x-www-form-urlencoded; charset=UTF-8"
  107. data-cache="false"
  108. 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"
  109. data-query-params="QueryParams"
  110. data-response-handler="ResponseHandler"
  111. data-click-to-select="true"
  112. data-single-select="true"
  113. data-show-jumpto="true">
  114. <thead>
  115. <tr class="row" id="header">
  116. <th data-field="state" data-checkbox="true"></th>
  117. <th data-align="center" data-field="id">流水号</th>
  118. <th data-align="center" data-field="orderStatusName">订单状态</th>
  119. <th data-align="center" data-field="isLock" data-formatter="IsLockFormatter">是否删除</th>
  120. <th data-align="center" data-field="customerId">客户编号</th>
  121. <th data-align="center" data-field="orderDate" data-formatter="DateFormatter">订单日期</th>
  122. <th data-align="center" data-field="linkName">联系人</th>
  123. <th data-align="center" data-field="telephone">电话</th>
  124. <th data-align="center" data-field="saleManName">业务员</th>
  125. <th data-align="center" data-field="saleTypeName">外销/内销</th>
  126. @*<th data-align="center" data-formatter="ActionsFormatter"></th>*@
  127. </tr>
  128. </thead>
  129. </table>
  130. </div>
  131. <div class="table-box mr-4 iwb-bootstrap-table" id="orderItemInfo" style="display: none;">
  132. <div class="btn-toolbar row" role="toolbar" aria-label="Toolbar with button groups">
  133. <div class="col-sm-12 col-lg-12 pull-left" style="padding: 0">
  134. <div class="btn-group btn-group-sm" id="Tool1" role="group" aria-label="First group">
  135. @if (PermissionChecker.IsGranted(PermissionNames.PagesOrderInfoOrderMgCreateOrderItem))
  136. {
  137. <button type="button" class="btn btn-default btnOrderTool" data-type="_btnCreate" data-url="/api/services/app/OrderItems/Create" onclick="CreateItem()">
  138. <i class="iconfont icon-add">添加订单明细</i>
  139. </button>
  140. }
  141. @if (PermissionChecker.IsGranted(PermissionNames.PagesOrderInfoOrderMgUpdateOrderItem))
  142. {
  143. <button type="button" class="btn btn-default btnOrderTool" data-type="btnUpdate" data-url="/api/services/app/OrderItems/Update" onclick="UpdateItem()">
  144. <i class="iconfont icon-edit">修改订单明细</i>
  145. </button>
  146. }
  147. @if (PermissionChecker.IsGranted(PermissionNames.PagesOrderInfoOrderMgDeleteOrderItem))
  148. {
  149. <button type="button" class="btn btn-default btnOrderTool" data-type="btnDelete" data-url="/api/services/app/OrderItems/Delete" onclick="DeleteItem()">
  150. <i class="iconfont icon-delete">删除订单明细</i>
  151. </button>
  152. }
  153. </div>
  154. </div>
  155. </div>
  156. <table id="tableOrderItem"
  157. data-url="/api/services/app/OrderItems/GetAll"
  158. data-id-field="id" data-unique-id="id"
  159. data-striped="true" data-click-to-select="true" data-single-select="true"
  160. data-method="post" data-side-pagination="server" data-content-type="application/x-www-form-urlencoded; charset=UTF-8"
  161. data-cache="false" data-pagination="true" data-page-size="10" data-page-number="1" data-page-list="[10,30,50,100]"
  162. data-pagination-h-align="left" data-pagination-detail-h-align="right"
  163. data-query-params="QueryItemParams" data-response-handler="ResponseHandler" data-show-jumpto="true">
  164. <thead>
  165. <tr class="row">
  166. <th data-field="state" data-checkbox="true"></th>
  167. <th data-align="center" data-field="id">明细流水号</th>
  168. <th data-align="center" data-field="productNo">产品编号</th>
  169. <th data-align="center" data-field="emergencyLevel" data-formatter="EmergencyLevelFormatter">紧急程度</th>
  170. <th data-align="center" data-field="isLock" data-formatter="IsLockFormatter">是否删除</th>
  171. <th data-align="center" data-field="quantity">数量</th>
  172. @if (isCanViewPrice)
  173. {
  174. <th data-align="center" data-field="price">含税价格</th>
  175. <th data-align="center" data-field="afterTaxPrice">不含税价格</th>
  176. <th data-align="center" data-field="currencyId">货币</th>
  177. <th data-align="center" data-field="logisticsFee">运费</th>
  178. <th data-align="center" data-field="moldFee">模具费</th>
  179. @*<th data-align="center" data-field="currencyPrice">货币价格(含税)</th>*@
  180. }
  181. <th data-align="center" data-field="sendDate" data-formatter="DateFormatter">送货时间</th>
  182. </tr>
  183. </thead>
  184. </table>
  185. </div>
  186. @section modal{
  187. <section>
  188. <!--Main Modal-->
  189. <div class="modal fade" id="modal" role="dialog" tabindex="-1" aria-labelledby="ModalLabel" aria-hidden="true">
  190. <div class="modal-dialog modal-dialog-centered" role="document" style="width: 600px">
  191. <div class="modal-content">
  192. @Html.Partial("Modals/_ModalHeader", new ModalHeaderViewModel("订单"))
  193. @{
  194. var inputs = new List<InputViewModel>
  195. {
  196. new InputViewModel("customerId",hide:true),
  197. new InputViewModel("saleMan",hide:true),
  198. new InputViewModel("saleManId",hide:true),
  199. //new InputViewModel("id",displayName:"流水号"),
  200. new InputViewModel("stockNo",displayName:"客户订单号"),
  201. new InputViewModel("orderStatusId",InputTypes.List, displayName:"订单状态").SetSelectOptions(OrderStatusList),
  202. new InputViewModel("orderDate", displayName:"订单日期").SetNotRequired(),
  203. new InputViewModel("customerName",displayName:"客户名称").SetSearchIcon("query_customer_modal","modal"),
  204. new InputViewModel("saleType",InputTypes.List, displayName: "外销/内销").SetSelectOptions(OrderSaleTypeList),
  205. new InputViewModel("customerSendId",InputTypes.List, displayName: "送货地址名称").SetEvents("onchange=ChangeCustomerSend()"),
  206. new InputViewModel("linkName", displayName: "联系人"),
  207. new InputViewModel("fax", displayName: "传真").SetNotRequired(),
  208. new InputViewModel("telephone", displayName: "电话").SetNotRequired(),
  209. new InputViewModel("sendAdress",displayName:"送货地址"),
  210. new InputViewModel("saleManName",displayName:"销售人员").SetSearchIcon("query_employee_modal")
  211. };
  212. //var specials = new List<SpecialInputModel>();
  213. }
  214. @Html.Partial("Modals/_ModalBody", new ModalBodyViewModel(inputs))
  215. @Html.Partial("Modals/_ModalFooter", "0")
  216. </div>
  217. </div>
  218. </div>
  219. </section>
  220. <section>
  221. @*@Html.Hidden("isForSearch", "0");*@
  222. @Html.Partial("Modals/Query/_Customer", "customerId|KeyWords-4")
  223. @Html.Partial("Modals/Query/_Employee", "saleMan|KeyWords-7,saleManName|KeyWords-saleManName-7,saleManId")
  224. </section>
  225. <section>
  226. <!--Main Modal-->
  227. <div class="modal fade" id="modal_OrderItemEdit" role="dialog" tabindex="-1" aria-labelledby="ModalLabel" aria-hidden="true">
  228. <div class="modal-dialog modal-dialog-centered" role="document">
  229. <div class="modal-content" style="width: 680px;">
  230. @Html.Partial("Modals/_ModalHeader", new ModalHeaderViewModel("订单明细"))
  231. <div class="modal-body container-fluid" style="padding: 0; padding-top: 15px;">
  232. <form class="pr-3 pl-3 form-horizontal" style="padding: 0 10px" id="formItem">
  233. <input type="hidden" name="id" />
  234. <input type="hidden" id="orderNo" name="orderNo" />
  235. <input type="hidden" id="orderItemStatusId" name="orderItemStatusId" />
  236. <input type="hidden" id="orderUnitId" name="orderUnitId" />
  237. <div class="form-group-sm row">
  238. <label class="iwb-label col-md-2 control-label iwb-label-required" for="productNo">产品编号</label>
  239. <div class="col-md-5">
  240. <div class="input-group">
  241. <select class="form-control" Required id="productNo" name="productNo" placeholder="请输入..." value="" style="width: 100%;" type="text" onchange="RefreshProductInfo()">
  242. @*@Html.Raw(ViewBag.CustomerDefaultProducts)*@
  243. </select>
  244. <div class="input-group-addon" onclick="ShowModal('query_Product_modal');">
  245. <i class="iconfont icon-search"></i>
  246. </div>
  247. </div>
  248. </div>
  249. <div class="col-md-1" style="padding: 0 0">
  250. <button type="button" class="btn btn-info btn-flat" style="height: 30px; width: 40px;" onclick="showSelectProductDialog()"><i class="iconfont icon-search"></i></button>
  251. </div>
  252. <div class="col-md-4" style="padding: 0 5px;margin-top: -6px;">
  253. <span class="store-query"> <strong>库存量:</strong><span id="storeQuantity">0</span><span>千件</span></span>
  254. <br>
  255. <span class="store-query"><strong>被定量:</strong><span id="orderQuantity">0</span><span>千件</span></span>
  256. <br>
  257. </div>
  258. </div>
  259. <div class="form-group-sm row">
  260. <label class="iwb-label col-md-2 control-label" for="sendDate">送货时间</label>
  261. <div class="col-md-4">
  262. <input class="form-control" id="sendDate" name="sendDate" placeholder="请输入..." value="" style="" type="text">
  263. </div>
  264. <label class="iwb-label col-md-2 control-label" for="IsStandard">标准件</label>
  265. <div class="col-md-4">
  266. <input class="form-control" style="width: 100%" id="IsStandard" disabled="disabled" name="IsStandard" placeholder="请输入..." value="" type="text">
  267. </div>
  268. </div>
  269. <div class="form-group-sm row">
  270. <label class="iwb-label col-md-2 control-label iwb-label-required" for="price">货币类型</label>
  271. <div class="col-md-4">
  272. <select class="form-control" style="width: 100%" id="currencyId" name="currencyId" placeholder="请输入..." value="" onchange="RefreshCurrency()" type="text">
  273. @Html.Raw(@strCurrencies);
  274. </select>
  275. </div>
  276. <label class="iwb-label col-md-2 control-label iwb-label-required" for="toCnyRate">当前汇率</label>
  277. <div class="col-md-4">
  278. <input class="form-control required number" Required style="width: 100%" id="toCnyRate" name="toCnyRate" placeholder="请输入..." min="0" value="" type="text">
  279. </div>
  280. </div>
  281. <div class="form-group-sm row">
  282. <label class="iwb-label col-md-2 control-label iwb-label-required" for="price">含税价格</label>
  283. <div class="col-md-4">
  284. <input class="form-control required number" Required style="width: 100%" id="price" name="price" placeholder="请输入..." value="" min="0" type="text">
  285. </div>
  286. <label class="iwb-label col-md-2 control-label iwb-label-required" for="quantity">数量</label>
  287. <div class="col-md-4">
  288. <input class="form-control required number" Required style="width: 100%" id="quantity" name="quantity" placeholder="请输入..." min="0" value="" type="text">
  289. </div>
  290. </div>
  291. <div class="form-group-sm row" id="noTaxDiv">
  292. <label class="iwb-label col-md-2 control-label iwb-label-required" for="price">不含税价格</label>
  293. <div class="col-md-4">
  294. <input class="form-control required number" Required style="width: 100%" id="afterTaxPrice" name="afterTaxPrice" placeholder="请输入..." value="" min="0" type="text">
  295. </div>
  296. <div class="col-md-4" style="padding: 6px 25px;">
  297. <span class="store-query"> <strong>当前税率:</strong><span id="currentTaxRate">@ViewBag.TagRate</span><span>%</span></span>
  298. <br>
  299. </div>
  300. </div>
  301. <div class="form-group-sm row">
  302. <label class="iwb-label col-md-2 control-label" for="logisticsFee">运费(含税)</label>
  303. <div class="col-md-4">
  304. <input class="form-control number" id="logisticsFee" name="logisticsFee" placeholder="请输入..." value="0" min="0" style="" type="number">
  305. </div>
  306. <label class="iwb-label col-md-2 control-label " for="moldFee">模具费(含税)</label>
  307. <div class="col-md-4">
  308. <input class="form-control number" id="moldFee" name="moldFee" placeholder="请输入..." value="0" style="" min="0" type="number">
  309. </div>
  310. </div>
  311. <div class="form-group-sm row">
  312. <label class="iwb-label col-md-2 control-label" for="logisticsFee">运费(不含税)</label>
  313. <div class="col-md-4">
  314. <input class="form-control number" id="logisticsFeeAfterTax" name="logisticsFeeAfterTax" placeholder="请输入..." value="0" min="0" style="" type="number">
  315. </div>
  316. <label class="iwb-label col-md-2 control-label " for="moldFee">模具费(不含税)</label>
  317. <div class="col-md-4">
  318. <input class="form-control number" id="moldFeeAfterTax" name="moldFeeAfterTax" placeholder="请输入..." value="0" style="" min="0" type="number">
  319. </div>
  320. </div>
  321. <div class="form-group-sm row">
  322. <label class="iwb-label col-md-2 control-label" for="isReport">检验报告</label>
  323. <div class="col-md-4">
  324. <select class="form-control" style="width: 100%" id="isReport" name="isReport" placeholder="请输入..." value="" style="" type="text">
  325. <option value="Y" selected="selected">是</option>
  326. <option value="N">否</option>
  327. </select>
  328. </div>
  329. <label class="iwb-label col-md-2 control-label" for="isPartSend">部分送货</label>
  330. <div class="col-md-4">
  331. <select class="form-control" style="width: 100%" id="isPartSend" name="isPartSend" placeholder="请输入..." value="" style="" type="text">
  332. <option value="Y" selected="selected">是</option>
  333. <option value="N">否</option>
  334. </select>
  335. </div>
  336. </div>
  337. <div class="form-group-sm row">
  338. <label class="iwb-label col-md-2 control-label" for="Material">材质</label>
  339. <div class="col-md-4">
  340. <input class="form-control" id="Material" name="Material" placeholder="请输入..." value="" style="" type="text">
  341. </div>
  342. <label class="iwb-label col-md-2 control-label" for="Model">规格</label>
  343. <div class="col-md-4">
  344. <input class="form-control" id="Model" name="Model" placeholder="请输入..." value="" style="" type="text">
  345. </div>
  346. </div>
  347. <div class="form-group-sm row">
  348. <label class="iwb-label col-md-2 control-label" for="SurfaceColor">表色</label>
  349. <div class="col-md-4">
  350. <input class="form-control" id="SurfaceColor" name="surfaceColor" placeholder="请输入..." value="" style="" type="text">
  351. </div>
  352. <label class="iwb-label col-md-2 control-label" for="Rigidity">硬度</label>
  353. <div class="col-md-4">
  354. <input class="form-control" id="Rigidity" name="Rigidity" placeholder="请输入..." value="" style="" type="text">
  355. </div>
  356. </div>
  357. <div class="form-group-sm row">
  358. <label class="iwb-label col-md-2 control-label" for="ProductName">产品名称</label>
  359. <div class="col-md-4">
  360. <input class="form-control" id="ProductName" name="ProductName" placeholder="请输入..." value="" style="" type="text">
  361. </div>
  362. <label class="iwb-label col-md-2 control-label" for="partNo">零件号</label>
  363. <div class="col-md-4">
  364. <div class="input-group">
  365. <input class="form-control" id="partNo" name="partNo" placeholder="请输入..." value="" style="" type="text">
  366. <div class="input-group-addon" onclick="f_QueryProductByPartNo();" title="通过零件号查询对应的产品">
  367. <i class="iconfont icon-search"></i>
  368. </div>
  369. </div>
  370. </div>
  371. </div>
  372. <div class="form-group-sm row">
  373. <label class="iwb-label col-md-2 control-label" for="wareHouse">送货仓库</label>
  374. <div class="col-md-4">
  375. <input class="form-control" id="wareHouse" name="wareHouse" placeholder="请输入..." value="" style="" type="text">
  376. </div>
  377. <label class="iwb-label col-md-2 control-label iwb-label-required" for="emergencyLevel">紧急程度</label>
  378. <div class="col-md-4">
  379. @*<input class="form-control" id="emergencyLevel" name="emergencyLevel" placeholder="请输入..." value="" style="" type="text">*@
  380. @Html.DropDownList("emergencyLevel", emergencyLevelList, htmlAttributes: new { @class = "form-control Required", placeholder = "请选择", style = "width: 100%" })
  381. </div>
  382. </div>
  383. <div class="form-group-sm row">
  384. <label class="iwb-label col-md-2 control-label " for="productHsCode">产品海关号</label>
  385. <div class="col-md-4">
  386. <input class="form-control" id="productHsCode" name="productHsCode" placeholder="请输入..." value="" style="" type="text"/>
  387. </div>
  388. <label class="iwb-label col-md-2 control-label " for="mHsCode">材料海关号</label>
  389. <div class="col-md-4">
  390. <input class="form-control" id="mHsCode" name="mHsCode" disabled="disabled" placeholder="请输入..." value="" style="" type="text"/>
  391. </div>
  392. </div>
  393. <div class="form-group-sm row">
  394. <label class="iwb-label col-md-2 control-label" for="wareHouse">客户标准名称</label>
  395. <div class="col-md-4">
  396. <input class="form-control" id="standardName" name="standardName" placeholder="请输入..." value="" style="" type="text">
  397. </div>
  398. <label class="iwb-label col-md-2 control-label " for="orderItemDesc">描述</label>
  399. <div class="col-md-4">
  400. <input class="form-control" id="orderItemDesc" name="orderItemDesc" placeholder="请输入..." value="" style="" type="text">
  401. </div>
  402. </div>
  403. </form>
  404. </div>
  405. @Html.Partial("Modals/_ModalFooter", "0")
  406. </div>
  407. </div>
  408. </div>
  409. @Html.Partial("Modals/Query/_Product01", "productNo")
  410. @Html.Partial("_searchInfoByProductNo")
  411. </section>
  412. <div class="store_box">
  413. <div class="close" onclick="f_closeStore_box(this)"><i class="iconfont icon-close"></i></div>
  414. <table class="table table-striped">
  415. <tbody>
  416. <tr>
  417. <th style="width: 150px">批次号</th>
  418. <th style="width: 150px">库位</th>
  419. <th style="width: 150px">库存(千件)</th>
  420. <th style="width: 150px">可用数量(千件)</th>
  421. </tr>
  422. </tbody>
  423. </table>
  424. </div>
  425. }
  426. @section scripts
  427. {
  428. <script src="~/Content/Plugins/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js"></script>
  429. <script src="~/Content/Plugins/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.zh-CN.js"></script>
  430. @*<script src="~/Views/OrderInfo/js/OrderMg.js"></script>*@
  431. <script type="text/javascript">
  432. //cId cStockNo cOrderStatusId cCustomerId cStartDate cEndDate
  433. var loToCNYCurrenyRate = [];
  434. var datePickerOpt = {
  435. language: 'zh-CN',
  436. format: "yyyy-mm-dd",
  437. todayBtn: true,
  438. autoclose: true,
  439. startView: 2,
  440. minView: 2,
  441. maxView: 4
  442. //showSecond: true,
  443. //showHours: true,
  444. //minuteStep: 10
  445. };
  446. var itemTable = $("#tableOrderItem");
  447. $(function() {
  448. @{
  449. // List<CurrencyExchangeRate> loToCNYCurrenyRate
  450. foreach (var currency in loToCNYCurrenyRate ?? new List<CurrencyExchangeRate>())
  451. {
  452. <text>
  453. loToCNYCurrenyRate.push({
  454. FromCurrencyId: "@currency.FromCurrencyId",
  455. ExchangeRate: "@currency.ExchangeRate"
  456. });
  457. </text>
  458. }
  459. }
  460. //show完毕前执行
  461. //$("#orderDate").datetimepicker(datePickerOpt).on('show', function (event) {
  462. // event.preventDefault();
  463. // event.stopPropagation();
  464. //}).on('hide',
  465. // function (event) {
  466. // event.preventDefault();
  467. // event.stopPropagation();
  468. // });
  469. $("#sendDate").datetimepicker(datePickerOpt).on('show',
  470. function(event) {
  471. event.preventDefault();
  472. event.stopPropagation();
  473. }).on('hide',
  474. function(event) {
  475. event.preventDefault();
  476. event.stopPropagation();
  477. });
  478. $("#KeyWords-2").datetimepicker(datePickerOpt);
  479. $("#KeyWords-3").datetimepicker(datePickerOpt);
  480. LoadTable({
  481. onCheck: ShowOrderItem,
  482. onUncheck: UnShowOrderItem,
  483. onLoadSuccess: OnLoadSuccessOrder,
  484. });
  485. //LoadQueryCustomerTable();
  486. var funs = window.funs || { none: function() { console.log("No type"); } };
  487. funs["btnUpdate"] = function() {
  488. BtnUpdate({ readonly: "standardName,saleManName", disabled: "saleType" });
  489. };
  490. funs["btnCreate1"] = function() {
  491. abp.ajax({
  492. url: window.appUrl + 'OrderHeaders/GetNewOrderNo',
  493. async: true,
  494. type: "Post",
  495. contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
  496. isValidate: false,
  497. dataType: "json",
  498. success: function(res) {
  499. BtnCreate({
  500. readonly: "id,sendAdress,customerName,saleManName,orderDate ",
  501. disabled: "orderStatusId,saleType",
  502. data: { orderStatusId: "2", id: res, orderDate: GetNowFormatDate() }
  503. });
  504. //$("#OrderStatusId").val("2").select2();
  505. }
  506. });
  507. }
  508. funs["btnCreate"] = function () {
  509. BtnCreate({
  510. readonly: "sendAdress,customerName,saleManName,orderDate ",
  511. disabled: "orderStatusId,saleType",
  512. data: { orderStatusId: "2", orderDate: GetNowFormatDate() }
  513. });
  514. }
  515. funs["btnDelete"] = function(url) {
  516. var rows = $("#table").bootstrapTable("getSelections");
  517. if (rows.length === 1) {
  518. //if (rows[0].orderStatusId === 2) {
  519. // abp.message.confirm(abp.localization.localize("DeleteConfirmMsg"),
  520. // abp.localization.localize("DeleteConfirmTitle"),
  521. // function() {
  522. // SaveAjax({ url: url, data: { Id: rows[0].id }, isValidate: false, table: $("#table") });
  523. // });
  524. //} else {
  525. // abp.message.warn("非新建的订单不可删除!");
  526. //}
  527. abp.message.confirm(abp.localization.localize("DeleteConfirmMsg"),
  528. abp.localization.localize("DeleteConfirmTitle"),
  529. function() {
  530. SaveAjax({ url: url, data: { Id: rows[0].id }, isValidate: false, table: $("#table") });
  531. });
  532. } else
  533. abp.message.warn(abp.localization.localize("ChooseOneToOp"));
  534. }
  535. funs["btnShow"] = function(url) {
  536. BtnShow(url);
  537. }
  538. //$("#currencyPrice").off("blur").on("blur",
  539. // function() {
  540. // RefreshCurrency();
  541. // });
  542. $("#price").off("blur").on("blur",
  543. function() {
  544. //var p = $(this).val();
  545. //var rate = $("#currentTaxRate").text();
  546. //SaveAjax({
  547. // url: window.appUrl + `Query/CalcTaxPrice?type=${1}&input=${p}&rate=${rate}`,
  548. // isValidate: false,
  549. // isAlert: false,
  550. // async: false,
  551. // success: function(res) {
  552. // $("#afterTaxPrice").val(res);
  553. // }
  554. //});
  555. tranTax(1, $("#price"), $("#afterTaxPrice"));
  556. });
  557. $("#afterTaxPrice").off("blur").on("blur",
  558. function() {
  559. //var p = $(this).val();
  560. //var rate = $("#currentTaxRate").text();
  561. ////var r = (Number(p) * (1 + Number(rate) / 100)).toFixed(3);
  562. ////$("#price").val(r);
  563. //SaveAjax({
  564. // url: window.appUrl + `Query/CalcTaxPrice?type=${2}&input=${p}&rate=${rate}`,
  565. // isValidate: false,
  566. // isAlert: false,
  567. // async: false,
  568. // success: function(res) {
  569. // $("#price").val(res);
  570. // }
  571. //});
  572. tranTax(2, $("#afterTaxPrice"), $("#price"));
  573. });
  574. $("#logisticsFee").off("blur").on("blur",
  575. function() {
  576. tranTax(1, $("#logisticsFee"), $("#logisticsFeeAfterTax"));
  577. });
  578. $("#logisticsFeeAfterTax").off("blur").on("blur",
  579. function () {
  580. tranTax(2, $("#logisticsFeeAfterTax"), $("#logisticsFee"));
  581. });
  582. $("#moldFee").off("blur").on("blur",
  583. function () {
  584. tranTax(1, $("#moldFee"), $("#moldFeeAfterTax"));
  585. });
  586. $("#moldFeeAfterTax").off("blur").on("blur",
  587. function () {
  588. tranTax(2, $("#moldFeeAfterTax"), $("#moldFee"));
  589. });
  590. });
  591. function tranTax(type,sourceDom,targetDom) {
  592. var p = $(sourceDom).val();
  593. var rate = $("#currentTaxRate").text();
  594. if (p && rate) {
  595. SaveAjax({
  596. url: window.appUrl + `Query/CalcTaxPrice?type=${type}&input=${p}&rate=${rate}`,
  597. isValidate: false,
  598. isAlert: false,
  599. async: false,
  600. success: function(res) {
  601. $(targetDom).val(res);
  602. }
  603. });
  604. } else {
  605. abp.message.warn('价格不能为空!');
  606. }
  607. }
  608. function RefreshCurrency() {
  609. var currency = $("#currencyId").val();
  610. if (!currency) {
  611. return;
  612. }
  613. loToCNYCurrenyRate.forEach(function(v, i) {
  614. if (currency === v.FromCurrencyId) {
  615. //var p = $("#currencyPrice").val();
  616. var rate = v.ExchangeRate;
  617. //var r = Number(p) * Number(rate);
  618. $("#toCnyRate").val(rate);
  619. }
  620. if (currency !== "CNY") {
  621. $("#noTaxDiv").hide();
  622. } else {
  623. $("#noTaxDiv").show();
  624. }
  625. });
  626. }
  627. function BtnShow(url) {
  628. var rows = config.table.bootstrapTable("getSelections");
  629. if (rows.length === 1) {
  630. window.open("@Url.Action("OrderDetail")/" + rows[0].id, "_blank");
  631. } else
  632. abp.message.warn(abp.localization.localize("ChooseOneToOp"));
  633. }
  634. function ActionsFormatter(v, r) {
  635. var str = '<span class="table-action" onclick="OrderItemDetail(\'' +
  636. r.id +
  637. '\')"><i class="iconfont icon-right"></i>订单明细</span>';
  638. return str;
  639. }
  640. function OrderItemDetail(id) {
  641. window.location.href = "OrderItemDetail/" + id;
  642. }
  643. function Submit_query_customer_modal(row) {
  644. var $modal = $("#query_customer_modal");
  645. row = row || $modal.find("table").bootstrapTable("getSelections")[0];
  646. if (targetDom !== "#modal") {
  647. $("#KeyWords-4").val(row.id);
  648. $modal.modal("hide");
  649. return;
  650. }
  651. if (row) {
  652. $("#customerId").val(row.id);
  653. $("#customerName").val(row.customerName);
  654. abp.ajax({
  655. url: window.appUrl + "CustomerSends/GetCustomerSendDtoByCustomerId",
  656. async: true,
  657. type: "Post",
  658. data: { customerId: row.id },
  659. contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
  660. isValidate: false,
  661. dataType: "json",
  662. success: function(res) {
  663. if (res && res.length > 0) {
  664. $("#customerSendId").empty();
  665. var options = "";
  666. $("#saleType").val(row.saleType).select2();
  667. res.forEach(function(value, index) {
  668. console.log(value, index);
  669. if (index === 0) {
  670. options += '<option value=\"' +
  671. value.id +
  672. '\" selected=\"selected\">' +
  673. value.customerSendName +
  674. '</option>';
  675. } else {
  676. options += '<option value=\"' +
  677. value.id +
  678. '\">' +
  679. value.customerSendName +
  680. '</option>';
  681. }
  682. });
  683. $("#customerSendId").html(options);
  684. $("#customerSendId").trigger("change");
  685. }
  686. }
  687. });
  688. $modal.modal("hide");
  689. } else
  690. abp.message.warn(abp.localization.localize("ChooseOneToOp"));
  691. }
  692. function ChangeCustomerSend() {
  693. var customerSendId = $("#customerSendId").val();
  694. if (!customerSendId) {
  695. customerSendId = 0;
  696. }
  697. abp.ajax({
  698. url: window.appUrl + "Query/GetCustomerSendInfo",
  699. async: false,
  700. type: "Post",
  701. data: { Id: customerSendId },
  702. contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
  703. isValidate: false,
  704. dataType: "json",
  705. success: function(res) {
  706. if (res) {
  707. $("#linkName").val(res.linkMan);
  708. $("#fax").val(res.fax);
  709. $("#telephone").val(res.telephone);
  710. $("#sendAdress").val(res.sendAdress);
  711. }
  712. }
  713. });
  714. }
  715. function OnAllItem(eName, eData, table) {
  716. //console.log(eName, eData);
  717. var $table = config.table;
  718. if (table) {
  719. if (typeof (table) === "string") {
  720. $table = $("#" + table);
  721. } else {
  722. $table = $(table);
  723. }
  724. }
  725. $table.closest(".table-box").find("#Tool1 .btn[data-type^='btn']")
  726. .prop('disabled', $table.bootstrapTable('getSelections').length !== 1);
  727. }
  728. function OnLoadSuccessOrder(data, table) {
  729. var $table = config.table;
  730. if (table) {
  731. if (typeof (table) === "string") {
  732. $table = $("#" + table);
  733. } else {
  734. $table = $(table);
  735. }
  736. }
  737. $table.find(".bs-checkbox").find("input").addClass("filled-in").after("<label></label");
  738. _isSearching = false;
  739. abp.ui.clearBusy();
  740. setTimeout(function() {
  741. var alldata = $("#table").bootstrapTable('getData');
  742. if (alldata.length > 0) {
  743. $("#table").bootstrapTable('check', 0);
  744. } else {
  745. $("#orderItemInfo").css("display", "none");
  746. }
  747. },
  748. 500);
  749. }
  750. var checkedOrderNo = "";
  751. var orderSaleType = 1;
  752. function ShowOrderItem(row, $element) {
  753. $("#table").bootstrapTable('resetView', { height: 500 });
  754. $("#orderItemInfo").css("display", "block");
  755. checkedOrderNo = row.id;
  756. orderSaleType = row.saleType;
  757. itemTable.bootstrapTable("destroy");
  758. LoadTable({
  759. table: itemTable,
  760. queryParams: QueryItemParams,
  761. onAll: function(eName, eData) {
  762. OnAllItem(eName, eData, "tableOrderItem");
  763. },
  764. onLoadSuccess: function(data) {
  765. OnLoadSuccess(data, "tableOrderItem");
  766. },
  767. onPostBody: function(data) {
  768. OnPostBody(data, "tableOrderItem");
  769. }
  770. });
  771. /*if (row.orderStatusId !== 2) {
  772. $("#orderItemInfo .btnOrderTool").prop('disabled', true);
  773. } else {
  774. $("#orderItemInfo .btnOrderTool").prop('disabled', false);
  775. }*/
  776. itemTable.bootstrapTable('resetView');
  777. if (orderSaleType === 2) {
  778. itemTable.bootstrapTable('hideColumn', "afterTaxPrice");
  779. }
  780. initCurrentProduct();
  781. }
  782. function UnShowOrderItem(row, $element) {
  783. $("#orderItemInfo").css("display", "none");
  784. itemTable.bootstrapTable("destroy");
  785. $("#table").bootstrapTable('resetView', { height: 800 });
  786. }
  787. function QueryItemParams(params) {
  788. return {
  789. MaxResultCount: params.limit,
  790. SkipCount: params.offset,
  791. sort: params.sort,
  792. sortOrder: params.order,
  793. SearchList: [{ KeyWords: checkedOrderNo, KeyField: "OrderNo", FieldType: "0", ExpType: "0" }]
  794. };
  795. }
  796. function Submit_query_Product_modal(row) {
  797. row = row || $("#query_Product_modal").find("table").bootstrapTable("getSelections")[0];
  798. if (row) {
  799. var productNo = row.id;
  800. //RefreshProductInfo(productNo);
  801. $("#productNo").append('<option value=\"' + productNo + '\">' + productNo + '</option>');
  802. $("#productNo").val(productNo);
  803. $("#productNo").trigger("change");
  804. $("#query_Product_modal").modal("hide");
  805. } else {
  806. abp.message.warn(abp.localization.localize("ChooseOneToOp"));
  807. }
  808. }
  809. function RefreshProductInfo() {
  810. var productNo = $("#productNo").val();
  811. if (!productNo) {
  812. return;
  813. }
  814. //abp.ajax({
  815. // url: window.appUrl + 'Query/GetProductById',
  816. // data: { Id: productNo },
  817. // async: true,
  818. // type: "Post",
  819. // contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
  820. // isValidate: false,
  821. // dataType: "json",
  822. // success: function (res) {
  823. // if (res) {
  824. // $("#ProductName").val(res.productName);
  825. // $("#Model").val(res.model);
  826. // $("#Material").val(res.material);
  827. // $("#SurfaceColor").val(res.surfaceColor);
  828. // $("#Rigidity").val(res.rigidity);
  829. // $("#IsStandard").val(res.isStandard === "Y" ? "是" : "否");
  830. // }
  831. // }
  832. //});
  833. SaveAjax({
  834. url: window.appUrl + 'Common/GetNewProductInfo?productNo=' + productNo,
  835. isValidate: false,
  836. isAlert: false,
  837. async: false,
  838. success: function(res) {
  839. if (res) {
  840. let pNo = res.id;
  841. let reg = new RegExp(/^s.{13}/g);
  842. if (productNo !== pNo && reg.test(pNo)) {
  843. $("#productNo").append('<option value=\"' + pNo + '\">' + pNo + '</option>');
  844. abp.message.warn(`此产品已被弃用,系统自动更换新产品!`);
  845. }
  846. $("#productNo").val(pNo);
  847. $('#select2-productNo-container').prop('title', pNo);
  848. $('#select2-productNo-container').html(pNo);
  849. $("#ProductName").val(res.productName);
  850. $("#Model").val(res.model);
  851. $("#Material").val(res.material);
  852. $("#SurfaceColor").val(res.surfaceColor);
  853. $("#Rigidity").val(res.rigidity);
  854. $("#mHsCode").val(res.materialHsCode);
  855. $("#IsStandard").val(res.isStandard === "Y" ? "是" : "否");
  856. RefreshDefaultPartNo(res.partNo);
  857. }
  858. }
  859. });
  860. RefreshCurrentStore();
  861. // RefreshDefaultPartNo();
  862. }
  863. function RefreshDefaultPartNo(partNo) {
  864. var productNo = $("#productNo").val();
  865. $("#partNo").val(partNo);
  866. SaveAjax({
  867. url: window.appUrl +
  868. "OrderItems/GetDefaultPartNoByOrderNo?orderNo=" +
  869. checkedOrderNo +
  870. "&productNo=" +
  871. productNo,
  872. isValidate: false,
  873. isAlert: false,
  874. dataType: "json",
  875. success: function(res) {
  876. //console.log(res);
  877. if (res) {
  878. $("#partNo").val(res.partNo || "");
  879. $("#productHsCode").val(res.productHsCode || "");//新增的客户产品海关编码
  880. }
  881. }
  882. });
  883. }
  884. function RefreshCurrentStore() {
  885. var productNo = $("#productNo").val();
  886. if (!productNo) {
  887. return;
  888. }
  889. SaveAjax({
  890. url: window.appUrl + "OrderItems/QueryCurrentProductNum",
  891. data: { Id: productNo },
  892. isAlert: false,
  893. isValidate: false,
  894. success: function(res) {
  895. if (res) {
  896. $("#storeQuantity").text(res.canUserQuantity ? Number(res.canUserQuantity) : 0);
  897. $("#orderQuantity").text(res.bookedQuantity ? Number(res.bookedQuantity) : 0);
  898. }
  899. }
  900. });
  901. }
  902. function initCurrentProduct() {
  903. SaveAjax({
  904. url: window.appUrl + "Query/GetDefualtProductByOrderNo?orderNo=" + checkedOrderNo,
  905. isValidate: false,
  906. isAlert: false,
  907. dataType: "json",
  908. success: function(res) {
  909. //console.log(res);
  910. if (res) {
  911. $("#productNo").html(res);
  912. }
  913. }
  914. });
  915. }
  916. function f_QueryProductByPartNo() {
  917. let partNo = $("#partNo").val();
  918. if (partNo) {
  919. SaveAjax({
  920. url: window.appUrl + `Query/GetDefaultProductByPartNo?partNo=${partNo}&orderNo=${checkedOrderNo}`,
  921. isValidate: false,
  922. isAlert: false,
  923. dataType: "json",
  924. success: function(res) {
  925. //console.log(res);
  926. if (res) {
  927. $("#productNo").val(res).select2();
  928. RefreshProductInfo();
  929. }
  930. }
  931. });
  932. }
  933. }
  934. function CreateItem() {
  935. var firstProductNo = $("#productNo").find("option").first().attr("value");
  936. //console.log('firstProductNo' + firstProductNo);
  937. var currencyId = "CNY";
  938. if (orderSaleType === 2) {
  939. currencyId = "USD";
  940. }
  941. BtnCreate({
  942. modal: $("#modal_OrderItemEdit"),
  943. url: "/api/services/app/OrderItems/Create",
  944. readonly: "IsStandard,ProductName,SurfaceColor,Rigidity,Material,Model,mHsCode",
  945. data: {
  946. orderNo: checkedOrderNo,
  947. productNo: firstProductNo,
  948. orderUnitId: "4",
  949. currencyId: currencyId,
  950. emergencyLevel: '@OrderItemEmergencyLevel.Normal',
  951. logisticsFee: "0",
  952. moldFee: "0",
  953. logisticsFeeAfterTax: "0",
  954. moldFeeAfterTax: "0"
  955. },
  956. disabled: "",
  957. table: itemTable
  958. });
  959. $("#isReport").val("Y").select2();
  960. $("#isPartSend").val("Y").select2();
  961. }
  962. function UpdateItem() {
  963. var rows = itemTable.bootstrapTable("getSelections");
  964. console.error('---------------------------------------');
  965. if (rows.length === 1) {
  966. console.table(rows[0]);
  967. var defaultOption = {
  968. modal: $("#modal_OrderItemEdit"),
  969. modalContent: "",
  970. modaltitle: window.opUpdate,
  971. data: rows[0],
  972. savebtn: null,
  973. form: null,
  974. disabled:
  975. "IsStandard,ProductName,SurfaceColor,Rigidity,Material,Model,SendDate,currencyId,toCnyRate,price,afterTaxPrice,quantity,mHsCode",
  976. url: "/api/services/app/OrderItems/Update",
  977. select2: true,
  978. select2tree: false,
  979. save: null,
  980. table: itemTable
  981. };
  982. OpenModal(defaultOption);
  983. $("#productNo").trigger("change");
  984. } else {
  985. abp.message.warn(abp.localization.localize("ChooseOneToOp"));
  986. }
  987. }
  988. function DeleteItem() {
  989. var rows = itemTable.bootstrapTable("getSelections");
  990. if (rows.length === 1) {
  991. abp.message.confirm(abp.localization.localize("DeleteConfirmMsg"),
  992. abp.localization.localize("DeleteConfirmTitle"),
  993. function() {
  994. /*SaveAjax({ url: "/api/services/app/OrderItems/Delete", data: { Id: rows[0].id }, isValidate: false});*/
  995. abp.services.app.orderItems.delete({ Id: rows[0].id },
  996. {
  997. async: false,
  998. timeout: 30000
  999. }).done(function() {
  1000. RefreshTable("tableOrderItem");
  1001. });
  1002. });
  1003. } else
  1004. abp.message.warn(abp.localization.localize("ChooseOneToOp"));
  1005. }
  1006. function DateFormatter(v, r) {
  1007. var sendDate = new Date(v);
  1008. return '<span style="text-decoration:underline;" >' + sendDate.Format('yyyy-MM-dd') + '</span>';
  1009. }
  1010. function EmergencyLevelFormatter(v, r) {
  1011. var name = $('#hid-emergencyLevel option[value="' + v + '"]').text();
  1012. if (v === '1') {
  1013. return '<span class="label label-success">' + name + '</span>';
  1014. } else {
  1015. return '<span class="label label-danger">' + name + '</span>';
  1016. }
  1017. }
  1018. function IsLockFormatter(v, r) {
  1019. if (v === 'Y') {
  1020. return '<span class="label label-danger">已删除</span>';
  1021. } else {
  1022. return '<span class="label label-success">-</span>';
  1023. }
  1024. }
  1025. function ProductNameFormatter(v, r) {
  1026. return `<span class="label label-default">${v}<a href="#" onclick="f_ShowStoreInfo('${r.id}',this)">(库存)</a></span>`;
  1027. }
  1028. function f_ShowStoreInfo(pno,dom) {
  1029. var $tbody = $(".store_box .table.table-striped > tbody");
  1030. $tbody.find("tr:not(:first)").remove();
  1031. var formatterShowStore = function (res) {
  1032. $(".store_box ").show();
  1033. $(".store_box").off('mouseleave').on('mouseleave',
  1034. function(e) {
  1035. $(".store_box ").hide(1000);
  1036. });
  1037. $(".store_box ").offset({
  1038. left: $(dom).offset().left,
  1039. top: $(dom).offset().top+25
  1040. });
  1041. res.forEach(function(r) {
  1042. var sTr = '<tr>';
  1043. sTr += '<td class="productionOrderNo">' + r.productionOrderNo + '</td>';
  1044. sTr += '<td class="storeLocationNo">' + r.storeLocationNo + '</td>';
  1045. sTr += '<td >' + r.quantity + '</td>';
  1046. var isCanUser = formatNum(Number(r.quantity), Number(r.freezeQuantity), 3);
  1047. sTr += '<td>' + isCanUser + '</td>';
  1048. sTr += '</tr>';
  1049. $tbody.append(sTr);
  1050. });
  1051. }
  1052. SaveAjax({
  1053. url: window.appUrl + `Common/GetProductStoreInfoByProductNo?productNo=${pno}`,
  1054. isValidate: false,
  1055. isAlert: false,
  1056. dataType: "json",
  1057. success: function (res) {
  1058. //console.log(res);
  1059. if (res && res.length > 0) {
  1060. formatterShowStore(res);
  1061. } else {
  1062. $(".store_box ").hide();
  1063. abp.message.warn("未查询到库存或库存为空!");
  1064. }
  1065. }
  1066. });
  1067. }
  1068. function f_closeStore_box(dom) {
  1069. $(".store_box ").hide();
  1070. }
  1071. var formatNum = function(f1, f2, digit) {
  1072. //var m = Math.pow(10, digit);
  1073. //return parseInt(f1*m-f2*m, 10) / m;
  1074. var z = f1 - f2;
  1075. return z.toFixed(digit);
  1076. }
  1077. function CanUserQuantityFormatte(v, r) {
  1078. var count = r.actualQuantity - r.freezeQuantity;
  1079. var str = '<span class="label label-warning">' + count + '</span>';
  1080. if (count > 0) {
  1081. str = '<span class="label label-info">' + count + '</span>';
  1082. } else if (count < 0) {
  1083. str = '<span class="label label-danger">' + count + '</span>';
  1084. }
  1085. return str;
  1086. }
  1087. </script>
  1088. }
  1089. <section style="display: none">
  1090. <select id="hid-type">
  1091. <option value=""></option>
  1092. </select>
  1093. @Html.DropDownList("hid-emergencyLevel", emergencyLevelList);
  1094. @Html.DropDownList("hide-ProductionOrderStatus", productionOrderStatus)
  1095. </section>