OrderMg.cshtml 50 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193
  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="customerRowNo">行号</label>
  399. <div class="col-md-4">
  400. <input class="form-control" id="customerRowNo" name="customerRowNo" placeholder="请输入..." value="" style="" type="text">
  401. </div>
  402. </div>
  403. <div class="form-group-sm row">
  404. <label class="iwb-label col-md-2 control-label " for="orderItemDesc">描述</label>
  405. <div class="col-md-4">
  406. <input class="form-control" id="orderItemDesc" name="orderItemDesc" placeholder="请输入..." value="" style="" type="text">
  407. </div>
  408. </div>
  409. </form>
  410. </div>
  411. @Html.Partial("Modals/_ModalFooter", "0")
  412. </div>
  413. </div>
  414. </div>
  415. @Html.Partial("Modals/Query/_Product01", "productNo")
  416. @Html.Partial("_searchInfoByProductNo")
  417. </section>
  418. <div class="store_box">
  419. <div class="close" onclick="f_closeStore_box(this)"><i class="iconfont icon-close"></i></div>
  420. <table class="table table-striped">
  421. <tbody>
  422. <tr>
  423. <th style="width: 150px">批次号</th>
  424. <th style="width: 150px">库位</th>
  425. <th style="width: 150px">库存(千件)</th>
  426. <th style="width: 150px">可用数量(千件)</th>
  427. </tr>
  428. </tbody>
  429. </table>
  430. </div>
  431. }
  432. @section scripts
  433. {
  434. <script src="~/Content/Plugins/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js"></script>
  435. <script src="~/Content/Plugins/bootstrap-datetimepicker/js/locales/bootstrap-datetimepicker.zh-CN.js"></script>
  436. @*<script src="~/Views/OrderInfo/js/OrderMg.js"></script>*@
  437. <script type="text/javascript">
  438. //cId cStockNo cOrderStatusId cCustomerId cStartDate cEndDate
  439. var loToCNYCurrenyRate = [];
  440. var datePickerOpt = {
  441. language: 'zh-CN',
  442. format: "yyyy-mm-dd",
  443. todayBtn: true,
  444. autoclose: true,
  445. startView: 2,
  446. minView: 2,
  447. maxView: 4
  448. //showSecond: true,
  449. //showHours: true,
  450. //minuteStep: 10
  451. };
  452. var itemTable = $("#tableOrderItem");
  453. $(function() {
  454. @{
  455. // List<CurrencyExchangeRate> loToCNYCurrenyRate
  456. foreach (var currency in loToCNYCurrenyRate ?? new List<CurrencyExchangeRate>())
  457. {
  458. <text>
  459. loToCNYCurrenyRate.push({
  460. FromCurrencyId: "@currency.FromCurrencyId",
  461. ExchangeRate: "@currency.ExchangeRate"
  462. });
  463. </text>
  464. }
  465. }
  466. //show完毕前执行
  467. //$("#orderDate").datetimepicker(datePickerOpt).on('show', function (event) {
  468. // event.preventDefault();
  469. // event.stopPropagation();
  470. //}).on('hide',
  471. // function (event) {
  472. // event.preventDefault();
  473. // event.stopPropagation();
  474. // });
  475. $("#sendDate").datetimepicker(datePickerOpt).on('show',
  476. function(event) {
  477. event.preventDefault();
  478. event.stopPropagation();
  479. }).on('hide',
  480. function(event) {
  481. event.preventDefault();
  482. event.stopPropagation();
  483. });
  484. $("#KeyWords-2").datetimepicker(datePickerOpt);
  485. $("#KeyWords-3").datetimepicker(datePickerOpt);
  486. LoadTable({
  487. onCheck: ShowOrderItem,
  488. onUncheck: UnShowOrderItem,
  489. onLoadSuccess: OnLoadSuccessOrder,
  490. });
  491. //LoadQueryCustomerTable();
  492. var funs = window.funs || { none: function() { console.log("No type"); } };
  493. funs["btnUpdate"] = function() {
  494. BtnUpdate({ readonly: "standardName,saleManName", disabled: "saleType" });
  495. };
  496. funs["btnCreate1"] = function() {
  497. abp.ajax({
  498. url: window.appUrl + 'OrderHeaders/GetNewOrderNo',
  499. async: true,
  500. type: "Post",
  501. contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
  502. isValidate: false,
  503. dataType: "json",
  504. success: function(res) {
  505. BtnCreate({
  506. readonly: "id,sendAdress,customerName,saleManName,orderDate ",
  507. disabled: "orderStatusId,saleType",
  508. data: { orderStatusId: "2", id: res, orderDate: GetNowFormatDate() }
  509. });
  510. //$("#OrderStatusId").val("2").select2();
  511. }
  512. });
  513. }
  514. funs["btnCreate"] = function () {
  515. BtnCreate({
  516. readonly: "sendAdress,customerName,saleManName,orderDate ",
  517. disabled: "orderStatusId,saleType",
  518. data: { orderStatusId: "2", orderDate: GetNowFormatDate() }
  519. });
  520. }
  521. funs["btnDelete"] = function(url) {
  522. var rows = $("#table").bootstrapTable("getSelections");
  523. if (rows.length === 1) {
  524. //if (rows[0].orderStatusId === 2) {
  525. // abp.message.confirm(abp.localization.localize("DeleteConfirmMsg"),
  526. // abp.localization.localize("DeleteConfirmTitle"),
  527. // function() {
  528. // SaveAjax({ url: url, data: { Id: rows[0].id }, isValidate: false, table: $("#table") });
  529. // });
  530. //} else {
  531. // abp.message.warn("非新建的订单不可删除!");
  532. //}
  533. abp.message.confirm(abp.localization.localize("DeleteConfirmMsg"),
  534. abp.localization.localize("DeleteConfirmTitle"),
  535. function() {
  536. SaveAjax({ url: url, data: { Id: rows[0].id }, isValidate: false, table: $("#table") });
  537. });
  538. } else
  539. abp.message.warn(abp.localization.localize("ChooseOneToOp"));
  540. }
  541. funs["btnShow"] = function(url) {
  542. BtnShow(url);
  543. }
  544. //$("#currencyPrice").off("blur").on("blur",
  545. // function() {
  546. // RefreshCurrency();
  547. // });
  548. $("#price").off("blur").on("blur",
  549. function() {
  550. //var p = $(this).val();
  551. //var rate = $("#currentTaxRate").text();
  552. //SaveAjax({
  553. // url: window.appUrl + `Query/CalcTaxPrice?type=${1}&input=${p}&rate=${rate}`,
  554. // isValidate: false,
  555. // isAlert: false,
  556. // async: false,
  557. // success: function(res) {
  558. // $("#afterTaxPrice").val(res);
  559. // }
  560. //});
  561. tranTax(1, $("#price"), $("#afterTaxPrice"));
  562. });
  563. $("#afterTaxPrice").off("blur").on("blur",
  564. function() {
  565. //var p = $(this).val();
  566. //var rate = $("#currentTaxRate").text();
  567. ////var r = (Number(p) * (1 + Number(rate) / 100)).toFixed(3);
  568. ////$("#price").val(r);
  569. //SaveAjax({
  570. // url: window.appUrl + `Query/CalcTaxPrice?type=${2}&input=${p}&rate=${rate}`,
  571. // isValidate: false,
  572. // isAlert: false,
  573. // async: false,
  574. // success: function(res) {
  575. // $("#price").val(res);
  576. // }
  577. //});
  578. tranTax(2, $("#afterTaxPrice"), $("#price"));
  579. });
  580. $("#logisticsFee").off("blur").on("blur",
  581. function() {
  582. tranTax(1, $("#logisticsFee"), $("#logisticsFeeAfterTax"));
  583. });
  584. $("#logisticsFeeAfterTax").off("blur").on("blur",
  585. function () {
  586. tranTax(2, $("#logisticsFeeAfterTax"), $("#logisticsFee"));
  587. });
  588. $("#moldFee").off("blur").on("blur",
  589. function () {
  590. tranTax(1, $("#moldFee"), $("#moldFeeAfterTax"));
  591. });
  592. $("#moldFeeAfterTax").off("blur").on("blur",
  593. function () {
  594. tranTax(2, $("#moldFeeAfterTax"), $("#moldFee"));
  595. });
  596. });
  597. function tranTax(type,sourceDom,targetDom) {
  598. var p = $(sourceDom).val();
  599. var rate = $("#currentTaxRate").text();
  600. if (p && rate) {
  601. SaveAjax({
  602. url: window.appUrl + `Query/CalcTaxPrice?type=${type}&input=${p}&rate=${rate}`,
  603. isValidate: false,
  604. isAlert: false,
  605. async: false,
  606. success: function(res) {
  607. $(targetDom).val(res);
  608. }
  609. });
  610. } else {
  611. abp.message.warn('价格不能为空!');
  612. }
  613. }
  614. function RefreshCurrency() {
  615. var currency = $("#currencyId").val();
  616. if (!currency) {
  617. return;
  618. }
  619. loToCNYCurrenyRate.forEach(function(v, i) {
  620. if (currency === v.FromCurrencyId) {
  621. //var p = $("#currencyPrice").val();
  622. var rate = v.ExchangeRate;
  623. //var r = Number(p) * Number(rate);
  624. $("#toCnyRate").val(rate);
  625. }
  626. if (currency !== "CNY") {
  627. $("#noTaxDiv").hide();
  628. } else {
  629. $("#noTaxDiv").show();
  630. }
  631. });
  632. }
  633. function BtnShow(url) {
  634. var rows = config.table.bootstrapTable("getSelections");
  635. if (rows.length === 1) {
  636. window.open("@Url.Action("OrderDetail")/" + rows[0].id, "_blank");
  637. } else
  638. abp.message.warn(abp.localization.localize("ChooseOneToOp"));
  639. }
  640. function ActionsFormatter(v, r) {
  641. var str = '<span class="table-action" onclick="OrderItemDetail(\'' +
  642. r.id +
  643. '\')"><i class="iconfont icon-right"></i>订单明细</span>';
  644. return str;
  645. }
  646. function OrderItemDetail(id) {
  647. window.location.href = "OrderItemDetail/" + id;
  648. }
  649. function Submit_query_customer_modal(row) {
  650. var $modal = $("#query_customer_modal");
  651. row = row || $modal.find("table").bootstrapTable("getSelections")[0];
  652. if (targetDom !== "#modal") {
  653. $("#KeyWords-4").val(row.id);
  654. $modal.modal("hide");
  655. return;
  656. }
  657. if (row) {
  658. $("#customerId").val(row.id);
  659. $("#customerName").val(row.customerName);
  660. abp.ajax({
  661. url: window.appUrl + "CustomerSends/GetCustomerSendDtoByCustomerId",
  662. async: true,
  663. type: "Post",
  664. data: { customerId: row.id },
  665. contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
  666. isValidate: false,
  667. dataType: "json",
  668. success: function(res) {
  669. if (res && res.length > 0) {
  670. $("#customerSendId").empty();
  671. var options = "";
  672. $("#saleType").val(row.saleType).select2();
  673. res.forEach(function(value, index) {
  674. console.log(value, index);
  675. if (index === 0) {
  676. options += '<option value=\"' +
  677. value.id +
  678. '\" selected=\"selected\">' +
  679. value.customerSendName +
  680. '</option>';
  681. } else {
  682. options += '<option value=\"' +
  683. value.id +
  684. '\">' +
  685. value.customerSendName +
  686. '</option>';
  687. }
  688. });
  689. $("#customerSendId").html(options);
  690. $("#customerSendId").trigger("change");
  691. }
  692. }
  693. });
  694. $modal.modal("hide");
  695. } else
  696. abp.message.warn(abp.localization.localize("ChooseOneToOp"));
  697. }
  698. function ChangeCustomerSend() {
  699. var customerSendId = $("#customerSendId").val();
  700. if (!customerSendId) {
  701. customerSendId = 0;
  702. }
  703. abp.ajax({
  704. url: window.appUrl + "Query/GetCustomerSendInfo",
  705. async: false,
  706. type: "Post",
  707. data: { Id: customerSendId },
  708. contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
  709. isValidate: false,
  710. dataType: "json",
  711. success: function(res) {
  712. if (res) {
  713. $("#linkName").val(res.linkMan);
  714. $("#fax").val(res.fax);
  715. $("#telephone").val(res.telephone);
  716. $("#sendAdress").val(res.sendAdress);
  717. }
  718. }
  719. });
  720. }
  721. function OnAllItem(eName, eData, table) {
  722. //console.log(eName, eData);
  723. var $table = config.table;
  724. if (table) {
  725. if (typeof (table) === "string") {
  726. $table = $("#" + table);
  727. } else {
  728. $table = $(table);
  729. }
  730. }
  731. $table.closest(".table-box").find("#Tool1 .btn[data-type^='btn']")
  732. .prop('disabled', $table.bootstrapTable('getSelections').length !== 1);
  733. }
  734. function OnLoadSuccessOrder(data, table) {
  735. var $table = config.table;
  736. if (table) {
  737. if (typeof (table) === "string") {
  738. $table = $("#" + table);
  739. } else {
  740. $table = $(table);
  741. }
  742. }
  743. $table.find(".bs-checkbox").find("input").addClass("filled-in").after("<label></label");
  744. _isSearching = false;
  745. abp.ui.clearBusy();
  746. setTimeout(function() {
  747. var alldata = $("#table").bootstrapTable('getData');
  748. if (alldata.length > 0) {
  749. $("#table").bootstrapTable('check', 0);
  750. } else {
  751. $("#orderItemInfo").css("display", "none");
  752. }
  753. },
  754. 500);
  755. }
  756. var checkedOrderNo = "";
  757. var orderSaleType = 1;
  758. function ShowOrderItem(row, $element) {
  759. $("#table").bootstrapTable('resetView', { height: 500 });
  760. $("#orderItemInfo").css("display", "block");
  761. checkedOrderNo = row.id;
  762. orderSaleType = row.saleType;
  763. itemTable.bootstrapTable("destroy");
  764. LoadTable({
  765. table: itemTable,
  766. queryParams: QueryItemParams,
  767. onAll: function(eName, eData) {
  768. OnAllItem(eName, eData, "tableOrderItem");
  769. },
  770. onLoadSuccess: function(data) {
  771. OnLoadSuccess(data, "tableOrderItem");
  772. },
  773. onPostBody: function(data) {
  774. OnPostBody(data, "tableOrderItem");
  775. }
  776. });
  777. /*if (row.orderStatusId !== 2) {
  778. $("#orderItemInfo .btnOrderTool").prop('disabled', true);
  779. } else {
  780. $("#orderItemInfo .btnOrderTool").prop('disabled', false);
  781. }*/
  782. itemTable.bootstrapTable('resetView');
  783. if (orderSaleType === 2) {
  784. itemTable.bootstrapTable('hideColumn', "afterTaxPrice");
  785. }
  786. initCurrentProduct();
  787. }
  788. function UnShowOrderItem(row, $element) {
  789. $("#orderItemInfo").css("display", "none");
  790. itemTable.bootstrapTable("destroy");
  791. $("#table").bootstrapTable('resetView', { height: 800 });
  792. }
  793. function QueryItemParams(params) {
  794. return {
  795. MaxResultCount: params.limit,
  796. SkipCount: params.offset,
  797. sort: params.sort,
  798. sortOrder: params.order,
  799. SearchList: [{ KeyWords: checkedOrderNo, KeyField: "OrderNo", FieldType: "0", ExpType: "0" }]
  800. };
  801. }
  802. function Submit_query_Product_modal(row) {
  803. row = row || $("#query_Product_modal").find("table").bootstrapTable("getSelections")[0];
  804. if (row) {
  805. var productNo = row.id;
  806. //RefreshProductInfo(productNo);
  807. $("#productNo").append('<option value=\"' + productNo + '\">' + productNo + '</option>');
  808. $("#productNo").val(productNo);
  809. $("#productNo").trigger("change");
  810. $("#query_Product_modal").modal("hide");
  811. } else {
  812. abp.message.warn(abp.localization.localize("ChooseOneToOp"));
  813. }
  814. }
  815. function RefreshProductInfo() {
  816. var productNo = $("#productNo").val();
  817. if (!productNo) {
  818. return;
  819. }
  820. //abp.ajax({
  821. // url: window.appUrl + 'Query/GetProductById',
  822. // data: { Id: productNo },
  823. // async: true,
  824. // type: "Post",
  825. // contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
  826. // isValidate: false,
  827. // dataType: "json",
  828. // success: function (res) {
  829. // if (res) {
  830. // $("#ProductName").val(res.productName);
  831. // $("#Model").val(res.model);
  832. // $("#Material").val(res.material);
  833. // $("#SurfaceColor").val(res.surfaceColor);
  834. // $("#Rigidity").val(res.rigidity);
  835. // $("#IsStandard").val(res.isStandard === "Y" ? "是" : "否");
  836. // }
  837. // }
  838. //});
  839. SaveAjax({
  840. url: window.appUrl + 'Common/GetNewProductInfo?productNo=' + productNo,
  841. isValidate: false,
  842. isAlert: false,
  843. async: false,
  844. success: function(res) {
  845. if (res) {
  846. let pNo = res.id;
  847. let reg = new RegExp(/^s.{13}/g);
  848. if (productNo !== pNo && reg.test(pNo)) {
  849. $("#productNo").append('<option value=\"' + pNo + '\">' + pNo + '</option>');
  850. abp.message.warn(`此产品已被弃用,系统自动更换新产品!`);
  851. }
  852. $("#productNo").val(pNo);
  853. $('#select2-productNo-container').prop('title', pNo);
  854. $('#select2-productNo-container').html(pNo);
  855. $("#ProductName").val(res.productName);
  856. $("#Model").val(res.model);
  857. $("#Material").val(res.material);
  858. $("#SurfaceColor").val(res.surfaceColor);
  859. $("#Rigidity").val(res.rigidity);
  860. $("#mHsCode").val(res.materialHsCode);
  861. $("#IsStandard").val(res.isStandard === "Y" ? "是" : "否");
  862. RefreshDefaultPartNo(res.partNo);
  863. }
  864. }
  865. });
  866. RefreshCurrentStore();
  867. // RefreshDefaultPartNo();
  868. }
  869. function RefreshDefaultPartNo(partNo) {
  870. var productNo = $("#productNo").val();
  871. $("#partNo").val(partNo);
  872. SaveAjax({
  873. url: window.appUrl +
  874. "OrderItems/GetDefaultPartNoByOrderNo?orderNo=" +
  875. checkedOrderNo +
  876. "&productNo=" +
  877. productNo,
  878. isValidate: false,
  879. isAlert: false,
  880. dataType: "json",
  881. success: function(res) {
  882. //console.log(res);
  883. if (res) {
  884. $("#partNo").val(res.partNo || "");
  885. $("#productHsCode").val(res.productHsCode || "");//新增的客户产品海关编码
  886. }
  887. }
  888. });
  889. }
  890. function RefreshCurrentStore() {
  891. var productNo = $("#productNo").val();
  892. if (!productNo) {
  893. return;
  894. }
  895. SaveAjax({
  896. url: window.appUrl + "OrderItems/QueryCurrentProductNum",
  897. data: { Id: productNo },
  898. isAlert: false,
  899. isValidate: false,
  900. success: function(res) {
  901. if (res) {
  902. $("#storeQuantity").text(res.canUserQuantity ? Number(res.canUserQuantity) : 0);
  903. $("#orderQuantity").text(res.bookedQuantity ? Number(res.bookedQuantity) : 0);
  904. }
  905. }
  906. });
  907. }
  908. function initCurrentProduct() {
  909. SaveAjax({
  910. url: window.appUrl + "Query/GetDefualtProductByOrderNo?orderNo=" + checkedOrderNo,
  911. isValidate: false,
  912. isAlert: false,
  913. dataType: "json",
  914. success: function(res) {
  915. //console.log(res);
  916. if (res) {
  917. $("#productNo").html(res);
  918. }
  919. }
  920. });
  921. }
  922. function f_QueryProductByPartNo() {
  923. let partNo = $("#partNo").val();
  924. if (partNo) {
  925. SaveAjax({
  926. url: window.appUrl + `Query/GetDefaultProductByPartNo?partNo=${partNo}&orderNo=${checkedOrderNo}`,
  927. isValidate: false,
  928. isAlert: false,
  929. dataType: "json",
  930. success: function(res) {
  931. //console.log(res);
  932. if (res) {
  933. $("#productNo").val(res).select2();
  934. RefreshProductInfo();
  935. }
  936. }
  937. });
  938. }
  939. }
  940. function CreateItem() {
  941. var firstProductNo = $("#productNo").find("option").first().attr("value");
  942. //console.log('firstProductNo' + firstProductNo);
  943. var currencyId = "CNY";
  944. if (orderSaleType === 2) {
  945. currencyId = "USD";
  946. }
  947. BtnCreate({
  948. modal: $("#modal_OrderItemEdit"),
  949. url: "/api/services/app/OrderItems/Create",
  950. readonly: "IsStandard,ProductName,SurfaceColor,Rigidity,Material,Model,mHsCode",
  951. data: {
  952. orderNo: checkedOrderNo,
  953. productNo: firstProductNo,
  954. orderUnitId: "4",
  955. currencyId: currencyId,
  956. emergencyLevel: '@OrderItemEmergencyLevel.Normal',
  957. logisticsFee: "0",
  958. moldFee: "0",
  959. logisticsFeeAfterTax: "0",
  960. moldFeeAfterTax: "0"
  961. },
  962. disabled: "",
  963. table: itemTable
  964. });
  965. $("#isReport").val("Y").select2();
  966. $("#isPartSend").val("Y").select2();
  967. }
  968. function UpdateItem() {
  969. var rows = itemTable.bootstrapTable("getSelections");
  970. console.error('---------------------------------------');
  971. if (rows.length === 1) {
  972. console.table(rows[0]);
  973. var defaultOption = {
  974. modal: $("#modal_OrderItemEdit"),
  975. modalContent: "",
  976. modaltitle: window.opUpdate,
  977. data: rows[0],
  978. savebtn: null,
  979. form: null,
  980. disabled:
  981. "IsStandard,ProductName,SurfaceColor,Rigidity,Material,Model,SendDate,currencyId,toCnyRate,price,afterTaxPrice,quantity,mHsCode",
  982. url: "/api/services/app/OrderItems/Update",
  983. select2: true,
  984. select2tree: false,
  985. save: null,
  986. table: itemTable
  987. };
  988. OpenModal(defaultOption);
  989. $("#productNo").trigger("change");
  990. } else {
  991. abp.message.warn(abp.localization.localize("ChooseOneToOp"));
  992. }
  993. }
  994. function DeleteItem() {
  995. var rows = itemTable.bootstrapTable("getSelections");
  996. if (rows.length === 1) {
  997. abp.message.confirm(abp.localization.localize("DeleteConfirmMsg"),
  998. abp.localization.localize("DeleteConfirmTitle"),
  999. function() {
  1000. /*SaveAjax({ url: "/api/services/app/OrderItems/Delete", data: { Id: rows[0].id }, isValidate: false});*/
  1001. abp.services.app.orderItems.delete({ Id: rows[0].id },
  1002. {
  1003. async: false,
  1004. timeout: 30000
  1005. }).done(function() {
  1006. RefreshTable("tableOrderItem");
  1007. });
  1008. });
  1009. } else
  1010. abp.message.warn(abp.localization.localize("ChooseOneToOp"));
  1011. }
  1012. function DateFormatter(v, r) {
  1013. var sendDate = new Date(v);
  1014. return '<span style="text-decoration:underline;" >' + sendDate.Format('yyyy-MM-dd') + '</span>';
  1015. }
  1016. function EmergencyLevelFormatter(v, r) {
  1017. var name = $('#hid-emergencyLevel option[value="' + v + '"]').text();
  1018. if (v === '1') {
  1019. return '<span class="label label-success">' + name + '</span>';
  1020. } else {
  1021. return '<span class="label label-danger">' + name + '</span>';
  1022. }
  1023. }
  1024. function IsLockFormatter(v, r) {
  1025. if (v === 'Y') {
  1026. return '<span class="label label-danger">已删除</span>';
  1027. } else {
  1028. return '<span class="label label-success">-</span>';
  1029. }
  1030. }
  1031. function ProductNameFormatter(v, r) {
  1032. return `<span class="label label-default">${v}<a href="#" onclick="f_ShowStoreInfo('${r.id}',this)">(库存)</a></span>`;
  1033. }
  1034. function f_ShowStoreInfo(pno,dom) {
  1035. var $tbody = $(".store_box .table.table-striped > tbody");
  1036. $tbody.find("tr:not(:first)").remove();
  1037. var formatterShowStore = function (res) {
  1038. $(".store_box ").show();
  1039. $(".store_box").off('mouseleave').on('mouseleave',
  1040. function(e) {
  1041. $(".store_box ").hide(1000);
  1042. });
  1043. $(".store_box ").offset({
  1044. left: $(dom).offset().left,
  1045. top: $(dom).offset().top+25
  1046. });
  1047. res.forEach(function(r) {
  1048. var sTr = '<tr>';
  1049. sTr += '<td class="productionOrderNo">' + r.productionOrderNo + '</td>';
  1050. sTr += '<td class="storeLocationNo">' + r.storeLocationNo + '</td>';
  1051. sTr += '<td >' + r.quantity + '</td>';
  1052. var isCanUser = formatNum(Number(r.quantity), Number(r.freezeQuantity), 3);
  1053. sTr += '<td>' + isCanUser + '</td>';
  1054. sTr += '</tr>';
  1055. $tbody.append(sTr);
  1056. });
  1057. }
  1058. SaveAjax({
  1059. url: window.appUrl + `Common/GetProductStoreInfoByProductNo?productNo=${pno}`,
  1060. isValidate: false,
  1061. isAlert: false,
  1062. dataType: "json",
  1063. success: function (res) {
  1064. //console.log(res);
  1065. if (res && res.length > 0) {
  1066. formatterShowStore(res);
  1067. } else {
  1068. $(".store_box ").hide();
  1069. abp.message.warn("未查询到库存或库存为空!");
  1070. }
  1071. }
  1072. });
  1073. }
  1074. function f_closeStore_box(dom) {
  1075. $(".store_box ").hide();
  1076. }
  1077. var formatNum = function(f1, f2, digit) {
  1078. //var m = Math.pow(10, digit);
  1079. //return parseInt(f1*m-f2*m, 10) / m;
  1080. var z = f1 - f2;
  1081. return z.toFixed(digit);
  1082. }
  1083. function CanUserQuantityFormatte(v, r) {
  1084. var count = r.actualQuantity - r.freezeQuantity;
  1085. var str = '<span class="label label-warning">' + count + '</span>';
  1086. if (count > 0) {
  1087. str = '<span class="label label-info">' + count + '</span>';
  1088. } else if (count < 0) {
  1089. str = '<span class="label label-danger">' + count + '</span>';
  1090. }
  1091. return str;
  1092. }
  1093. </script>
  1094. }
  1095. <section style="display: none">
  1096. <select id="hid-type">
  1097. <option value=""></option>
  1098. </select>
  1099. @Html.DropDownList("hid-emergencyLevel", emergencyLevelList);
  1100. @Html.DropDownList("hide-ProductionOrderStatus", productionOrderStatus)
  1101. </section>