add_bom.ftl 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="renderer" content="webkit|ie-comp|ie-stand">
  6. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  7. <meta name="viewport"
  8. content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
  9. <meta http-equiv="Cache-Control" content="no-siteapp"/>
  10. <#include "/base/add_base.ftl">
  11. <link href="${path}/common/lib/jquery.ui/jquery-ui.css" rel="stylesheet" type="text/css"/>
  12. <style>
  13. .add-list>li{margin: 10px 0;}
  14. input[type=radio]{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-1.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
  15. input[type=radio]:checked{-webkit-appearance:none;appearance:none;background: url(${path}/common/images/pts/radio-2.png) center center no-repeat;background-size:auto 100%;width: 20px;height: 20px;margin-right: 10px;}
  16. </style>
  17. <title>添加Bom - Bom管理 - RST</title>
  18. </head>
  19. <body>
  20. <nav class="breadcrumb"><i class="Hui-iconfont">&#xe67f;</i> 首页
  21. <span class="c-gray en">&gt;</span> Bom管理
  22. <span class="c-gray en">&gt;</span> 添加Bom
  23. <a class="btn radius r"
  24. style="line-height:1.6em;margin-top:3px;background: #32a3d8;color: #fff;border:1px solid #32a3d8;"
  25. href="javascript:location.replace(location.href);" title="刷新"><i class="Hui-iconfont">&#xe68f;</i></a>
  26. </nav>
  27. <article class="page-container" style="padding: 10px;width: 600px;margin: 0 auto;">
  28. <form action="${path}/admin/bom/save_bom" method="post" class="form form-horizontal" id="form-bom-add">
  29. <div class="row cl">
  30. <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>所属产品:</label>
  31. <div class="formControls col-xs-8 col-sm-9"> <span class="select-box">
  32. <select class="select" size="1" name="produceId" datatype="*" errormsg="请选择产品">
  33. <#if produceList?? && (produceList?size > 0) >
  34. <#list produceList as produce>
  35. <option value="${produce.produceId}" <#if produceId??><#if produceId ==produce.produceId >selected="selected"</#if></#if>>${produce.produceName}</option>
  36. </#list>
  37. <#else>
  38. <option value="">暂时没有产品,需要到生产产品页面添加产品</option>
  39. </#if>
  40. </select>
  41. </span>
  42. </div>
  43. </div>
  44. <div class="row cl">
  45. <label class="form-label col-xs-4 col-sm-3">修改基础:</label>
  46. <div class="formControls col-xs-8 col-sm-9"> <span class="select-box">
  47. <select class="select" size="1" name="bomId">
  48. </select>
  49. </span>
  50. </div>
  51. </div>
  52. <div class="row cl">
  53. <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>Bom名称:</label>
  54. <div class="formControls col-xs-8 col-sm-9">
  55. <input type="text" class="input-text" value="" id="bomName" name="bomName" placeholder="请输入1-20位的名称,支持中文、字母、数字" datatype="/^[a-zA-Z0-9\u4e00-\u9fa5]{1,20}$/" errormsg="请输入1-20位的名称,支持中文、字母、数字!">
  56. </div>
  57. </div>
  58. <div class="row cl">
  59. <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>硬件版本:</label>
  60. <div class="formControls col-xs-8 col-sm-9">
  61. <input type="text" class="input-text" value="" id="bomVersion" name="bomVersion" placeholder="请输入1-10位的版本号" datatype="*1-10" errormsg="请输入1-10位的版本号!">
  62. </div>
  63. </div>
  64. <div class="row cl">
  65. <label class="form-label col-xs-4 col-sm-3">备注:</label>
  66. <div class="formControls col-xs-8 col-sm-9">
  67. <textarea name="bomRemarks" id="bomRemarks" cols="" rows="" class="textarea"
  68. placeholder="Bom单备注,最多支持100字符" onKeyUp="$.Huitextarealength(this,100)" ></textarea>
  69. <p class="textarea-numberbar"><em class="textarea-length">0</em>/100</p>
  70. </div>
  71. </div>
  72. <div class="row cl">
  73. <label class="form-label col-xs-4 col-sm-3"><span class="c-red">*</span>Bom零件清单:</label>
  74. <div class="formControls col-xs-8 col-sm-9 components">
  75. <input type="hidden" id="bomComponentJson" name="bomComponentJson">
  76. <table class="table table-border table-bordered table-bg table-hover table-sort">
  77. <thead>
  78. <tr class="text-c">
  79. <th width="150">选择零件</th>
  80. <th width="60">零件数量</th>
  81. <th width="20">操作</th>
  82. </tr>
  83. </thead>
  84. <tbody id="componentaAll">
  85. </tbody>
  86. </table>
  87. <span id="componentsMsg" style="color: red"></span>
  88. </div>
  89. </div>
  90. <div class="row cl">
  91. <div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-3">
  92. <input class="btn btn-primary radius" type="button" value="&nbsp;&nbsp;新增零件&nbsp;&nbsp;" onclick="addComponents('#','')">
  93. </div>
  94. </div>
  95. <div class="row cl">
  96. <label class="form-label col-xs-4 col-sm-3"></label>
  97. <span class="c-red">*提示</span><span>:新增的Bom,需要批次选中该Bom单,才会生效!</span>
  98. </div>
  99. <div class="row cl">
  100. <div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-3">
  101. <input class="btn btn-primary radius" type="submit" value="&nbsp;&nbsp;提交&nbsp;&nbsp;">
  102. </div>
  103. </div>
  104. </form>
  105. </article>
  106. <script type="text/javascript">
  107. $(function(){
  108. $("#form-bom-add").Validform({
  109. tiptype: function (msg, o, cssctl) {
  110. if (o.type == 3) {//失败
  111. layer.msg(msg, {icon: 5, time: 3000});
  112. $(window).scrollTop(o.obj.offset().top - 40);
  113. }
  114. },
  115. datatype: {//自定义验证类型
  116. "select": function (gets, obj, curform, regxp) {
  117. if (gets == "") {
  118. return false;
  119. } else {
  120. return true;
  121. }
  122. }
  123. },
  124. ignoreHidden: true,
  125. tipSweep: true, //若为true,则只在表单提交时验证
  126. ajaxPost: true, //异步提交
  127. beforeCheck: function (curform) { //验证通过之前执行的函数
  128. },
  129. beforeSubmit: function (curform) { //验证通过之后执行的函数
  130. var ptsBomComponentsList = new Array();
  131. $("#componentaAll").find("tr").each(function (){
  132. var ptsBomComponents = {};
  133. ptsBomComponents.componentsId = $(this).find("[name='comName']").eq(0).val();
  134. ptsBomComponents.bomComponentsQuantity = $(this).find("[name='comNumber']").eq(0).val();
  135. ptsBomComponentsList.push(ptsBomComponents);
  136. })
  137. $("#bomComponentJson").val(JSON.stringify(ptsBomComponentsList));
  138. },
  139. callback: function (data) {//异步回调函数
  140. if (data) {
  141. var index = layer.alert(data.resultMsg, function () {
  142. if (data.resultCode == 200) {
  143. location.href = "${path}/admin/bom/_bom_list";
  144. } else {
  145. layer.close(index);
  146. }
  147. });
  148. }
  149. }
  150. });
  151. })
  152. var allComponents; //所有零件的集合
  153. var staticProduceId; //产品id,用于判断产品更改
  154. $(function () {
  155. /*添加页面初始化,添加一个零件选择框*/
  156. addComponents("#","");
  157. var produceId = $("[name='produceId']").val();
  158. staticProduceId = produceId;
  159. getBomByProduce(produceId);
  160. /*监听产品选择*/
  161. $("[name='produceId']").change(function(){
  162. var produceId = $(this).val();
  163. getBomByProduce(produceId);
  164. delComponent(0,"all");
  165. addComponents("#","");
  166. })
  167. /*监听修改基础 bom单*/
  168. $("[name='bomId']").change(function(){
  169. var bomId = $(this).val();
  170. getBom(bomId);
  171. })
  172. })
  173. /* 添加零件 */
  174. function addComponents(componentsId,number) {
  175. var tbody = $("#componentaAll");
  176. var produceId = $("[name='produceId']").val();
  177. if(allComponents == null || produceId != staticProduceId){ //获取零件列表
  178. staticProduceId = produceId;
  179. allComponents = listComponent(produceId);
  180. }
  181. var opHtml = '';
  182. for(var i=0;i<allComponents.length;i++){
  183. var components = allComponents[i];
  184. var isSelect = '';
  185. if(componentsId == components.componentsId){
  186. isSelect = 'selected="selected"';
  187. }
  188. opHtml += '<option value="'+ components.componentsId +'" '+ isSelect +'>'+ components.componentsName +'('+ components.componentsNo + ')</option>';
  189. }
  190. var html = '<tr class="text-c"> '
  191. +'<td> '
  192. +'<select class="select" size="1" name="comName" style="height: 30px;" datatype="*" errormsg="请选择零件"> '
  193. +''
  194. + opHtml
  195. +'</select> '
  196. +'</td> '
  197. +'<td> '
  198. +'<input type="text" class="input-text" value="'+ number +'" id="" name="comNumber" placeholder="零件数量" datatype="n1-3" errormsg="零件数量只能为数字且不能超过999件!"> '
  199. +'</td> '
  200. +'<td> '
  201. +'<a style="" href="javascript:void(0);" title="删除" onclick="delComponent(this,1)"> '
  202. +'<i class="Hui-iconfont">&#xe609;</i> '
  203. +'</a> '
  204. +'</td> '
  205. +'</tr>';
  206. tbody.append(html);
  207. }
  208. /*删除零件 type=all时删除所有的零件 */
  209. function delComponent(node,type) {
  210. if(type == "all"){
  211. $("#componentaAll").find("tr").each(function () {
  212. $(this).remove();
  213. })
  214. }else{
  215. //删除零件必须保证还有一个零件
  216. var componentLength = $("#componentaAll").find("tr").length;
  217. if(componentLength > 1){
  218. $(node).parent().parent().remove();
  219. }else{
  220. layer.msg('必须要有一个零件', {icon: 5, time: 3000});
  221. }
  222. }
  223. }
  224. /*获取所有的零件*/
  225. function listComponent(produceId) {
  226. var list = new Array();
  227. $.ajax({
  228. type: "POST",
  229. data: {
  230. produceId : produceId
  231. },
  232. url: "${path}/admin/bom/get_listComponents",
  233. async: false,
  234. success: function(data){
  235. if (data.returnCode == 200) {
  236. $("#componentsMsg").html("");
  237. list = data.returnMsg.ptsComponentsList;
  238. }
  239. if(data.returnCode != 200 || list.length < 1){ //提示需要添加零件
  240. $("#componentsMsg").html("该产品没有对应的零件,请到零件管理添加零件");
  241. }
  242. },
  243. error: function(XmlHttpRequest, textStatus, errorThrown){
  244. }
  245. });
  246. return list;
  247. }
  248. /*根据产品id,获取bom集合*/
  249. function getBomByProduce(produceId){
  250. $.ajax({
  251. type: "POST",
  252. data: {
  253. produceId : produceId
  254. },
  255. url: "${path}/admin/bom/get_listBom",
  256. async: false,
  257. success: function(data){
  258. var html = '<option value="">不选择</option>';
  259. if (data.returnCode == 200) {
  260. var bomList = data.returnMsg.ptsBomsList;
  261. for(var i=0;i<bomList.length;i++){
  262. html += '<option value="'+ bomList[i].bomId +'">'+ bomList[i].bomName +'</option>';
  263. }
  264. }
  265. if(data.returnCode != 200 || data.returnMsg.ptsBomsList <1){
  266. defaultAllInput();
  267. }
  268. $("[name='bomId']").html(html);
  269. },
  270. error: function(XmlHttpRequest, textStatus, errorThrown){
  271. }
  272. });
  273. }
  274. /*获取bom信息,赋值在页面上*/
  275. function getBom(bomId){
  276. var bom = new Object();
  277. $.ajax({
  278. type: "POST",
  279. data: {
  280. bomId : bomId
  281. },
  282. url: "${path}/admin/bom/get_bom",
  283. async: false,
  284. success: function(data){
  285. if (data.returnCode == 200) {
  286. bom = data.returnMsg.ptsBom;
  287. }
  288. },
  289. error: function(XmlHttpRequest, textStatus, errorThrown){
  290. }
  291. });
  292. if(bom != null && bom.bomId != null){
  293. $("#bomName").val(bom.bomName);
  294. $("#bomRemarks").val(bom.bomRemarks);
  295. $("#bomVersion").val(bom.bomVersion);
  296. delComponent(0,"all");
  297. var components = bom.ptsBomComponentsList;
  298. if(components != null && components.length > 0){
  299. for(var i=0;i<components.length;i++){
  300. addComponents(components[i].componentsId,components[i].bomComponentsQuantity);
  301. }
  302. }
  303. }else{
  304. defaultAllInput();
  305. }
  306. }
  307. /*当选择产品或者bom不选择时,都需要重置所有的输入框和表格*/
  308. function defaultAllInput() {
  309. $("#bomName").val("");
  310. $("#bomRemarks").val("");
  311. delComponent(0,"all");
  312. addComponents("#","");
  313. }
  314. </script>
  315. <!--/请在上方写此页面业务相关的脚本-->
  316. </body>
  317. </html>