subdata.html 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. <!DOCTYPE html>
  2. <html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
  3. <head>
  4. <th:block th:include="include :: header('主子表提交')" />
  5. <th:block th:include="include :: datetimepicker-css" />
  6. <style type="text/css">
  7. table label.error{position: inherit;}select + label.error{z-index:1;right:40px;}
  8. </style>
  9. </head>
  10. <body class="gray-bg">
  11. <div class="main-content">
  12. <form id="form-add" class="form-horizontal">
  13. <h4 class="form-header h4">客户信息</h4>
  14. <div class="row">
  15. <div class="col-sm-6">
  16. <div class="form-group">
  17. <label class="col-sm-4 control-label is-required">客户名称:</label>
  18. <div class="col-sm-8">
  19. <input name="name" placeholder="请输入客户名称" class="form-control" type="text" maxlength="30" required>
  20. </div>
  21. </div>
  22. </div>
  23. <div class="col-sm-6">
  24. <div class="form-group">
  25. <label class="col-sm-4 control-label is-required">用户性别:</label>
  26. <div class="col-sm-8">
  27. <select name="sex" class="form-control" th:with="type=${@dict.getType('sys_user_sex')}">
  28. <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
  29. </select>
  30. </div>
  31. </div>
  32. </div>
  33. </div>
  34. <div class="row">
  35. <div class="col-sm-6">
  36. <div class="form-group">
  37. <label class="col-sm-4 control-label">手机号码:</label>
  38. <div class="col-sm-8">
  39. <input id="phonenumber" name="phonenumber" placeholder="请输入手机号码" class="form-control isPhone" type="text" maxlength="11">
  40. </div>
  41. </div>
  42. </div>
  43. <div class="col-sm-6">
  44. <div class="form-group">
  45. <label class="col-sm-4 control-label is-required">生日:</label>
  46. <div class="col-sm-8">
  47. <div class="input-group date">
  48. <input name="birthday" class="form-control" placeholder="yyyy-MM-dd" type="text">
  49. <span class="input-group-addon"><i class="fa fa-calendar"></i></span>
  50. </div>
  51. </div>
  52. </div>
  53. </div>
  54. </div>
  55. <div class="row">
  56. <div class="col-sm-12">
  57. <div class="form-group">
  58. <label class="col-xs-2 control-label">备注:</label>
  59. <div class="col-xs-10">
  60. <textarea name="remark" maxlength="500" class="form-control" rows="3"></textarea>
  61. </div>
  62. </div>
  63. </div>
  64. </div>
  65. <h4 class="form-header h4">商品数据</h4>
  66. <div class="row">
  67. <div class="col-sm-12">
  68. <button type="button" class="btn btn-white btn-sm" onclick="addRow()"><i class="fa fa-plus"> 增加</i></button>
  69. <button type="button" class="btn btn-white btn-sm" onclick="sub.delRow()"><i class="fa fa-minus"> 删除</i></button>
  70. <div class="col-sm-12 select-table table-striped">
  71. <table id="bootstrap-table"></table>
  72. </div>
  73. </div>
  74. </div>
  75. </form>
  76. </div>
  77. <div class="row">
  78. <div class="col-sm-offset-5 col-sm-10">
  79. <button type="button" class="btn btn-sm btn-primary" onclick="submitHandler()"><i class="fa fa-check"></i>保 存</button>&nbsp;
  80. <button type="button" class="btn btn-sm btn-danger" onclick="closeItem()"><i class="fa fa-reply-all"></i>关 闭 </button>
  81. </div>
  82. </div>
  83. <th:block th:include="include :: footer" />
  84. <th:block th:include="include :: datetimepicker-js" />
  85. <script th:src="@{/js/jquery.tmpl.js}"></script>
  86. <script th:inline="javascript">
  87. $(function() {
  88. // 初始化数据, 可以由后台传过来
  89. var data = [
  90. {
  91. id: "100",
  92. name: "商品名称",
  93. weight: "100",
  94. price: "12.5",
  95. date: "2021-02-01",
  96. type: "1",
  97. },
  98. {
  99. id: "101",
  100. name: "商品名称2",
  101. weight: "50",
  102. price: "10.8",
  103. date: "2021-02-01",
  104. type: "0",
  105. }];
  106. var options = {
  107. data: data,
  108. pagination: false,
  109. showSearch: false,
  110. showRefresh: false,
  111. showToggle: false,
  112. showColumns: false,
  113. sidePagination: "client",
  114. columns: [{
  115. checkbox: true
  116. },
  117. {
  118. field: 'index',
  119. align: 'center',
  120. title: "序号",
  121. formatter: function (value, row, index) {
  122. var columnIndex = $.common.sprintf("<input type='hidden' name='index' value='%s'>", $.table.serialNumber(index));
  123. var columnId = $.common.sprintf("<input type='hidden' name='goods[%s].id' value='%s'>", index, row.id);
  124. return columnIndex + $.table.serialNumber(index) + columnId;
  125. }
  126. },
  127. {
  128. field: 'name',
  129. align: 'center',
  130. title: '商品名称',
  131. formatter: function(value, row, index) {
  132. var html = $.common.sprintf("<input class='form-control goodsName' type='text' name='goods[%s].name' value='%s'>", index, value);
  133. return html;
  134. }
  135. },
  136. {
  137. field: 'weight',
  138. align: 'center',
  139. title: '商品重量',
  140. formatter: function(value, row, index) {
  141. var html = $.common.sprintf("<input class='form-control goodsWeight' type='text' name='goods[%s].weight' value='%s'>", index, value);
  142. return html;
  143. }
  144. },
  145. {
  146. field: 'date',
  147. align: 'center',
  148. title: '商品日期',
  149. formatter: function(value, row, index) {
  150. var html = $.common.sprintf("<input class='form-control' type='text' name='goods[%s].date' value='%s' placeholder='yyyy-MM-dd'>", index, value);
  151. return html;
  152. }
  153. },
  154. {
  155. field: 'price',
  156. align: 'center',
  157. title: '商品价格',
  158. formatter: function(value, row, index) {
  159. var html = $.common.sprintf("<input class='form-control' type='text' name='goods[%s].price' value='%s'>", index, value);
  160. return html;
  161. }
  162. },
  163. {
  164. field: 'type',
  165. align: 'center',
  166. title: '商品种类',
  167. formatter: function(value, row, index) {
  168. var data = [{ index: index, type: value }];
  169. return $("#goodsTypeTpl").tmpl(data).html();
  170. }
  171. },
  172. {
  173. title: '操作',
  174. align: 'center',
  175. formatter: function(value, row, index) {
  176. var value = $.common.isNotEmpty(row.index) ? row.index : $.table.serialNumber(index);
  177. return '<a class="btn btn-danger btn-xs" href="javascript:void(0)" onclick="sub.delRowByIndex(\'' + value + '\')"><i class="fa fa-remove"></i>删除</a>';
  178. }
  179. }]
  180. };
  181. $.table.init(options);
  182. });
  183. $.validator.addMethod("goodsName", function(value, element) {
  184. return !this.optional(element);
  185. }, "商品名称必填。");
  186. $.validator.addMethod("goodsWeight", function(value, element) {
  187. return !this.optional(element) && (value <= 100 && value >= 0);
  188. }, "商品重量长度区间0-100。");
  189. /* 主子表-提交 */
  190. function submitHandler(index, layero){
  191. if ($.validate.form()) {
  192. var data = $("#form-add").serializeArray();
  193. alert(JSON.stringify(data))
  194. $.operate.saveModal("/demo/operate/customer/add", data);
  195. }
  196. }
  197. $("input[name='birthday']").datetimepicker({
  198. format: "yyyy-mm-dd",
  199. minView: "month",
  200. autoclose: true
  201. });
  202. function addRow() {
  203. var count = $("#" + table.options.id).bootstrapTable('getData').length;
  204. var row = {
  205. index: $.table.serialNumber(count),
  206. name: "",
  207. weight: "",
  208. price: "",
  209. date: "",
  210. type: "",
  211. }
  212. sub.addRow(row);
  213. }
  214. $("#bootstrap-table").on("post-body.bs.table", function (e, args) {
  215. $("input[name$='date']").datetimepicker({
  216. format: "yyyy-mm-dd",
  217. minView: "month",
  218. autoclose: true,
  219. pickerPosition:'top-right'
  220. });
  221. });
  222. </script>
  223. </body>
  224. </html>
  225. <!-- 商品类型 -->
  226. <script id="goodsTypeTpl" type="text/x-jquery-tmpl">
  227. <div>
  228. <select class='form-control' name='goods[${index}].type'>
  229. <option value="">所有</option>
  230. <option value="0" {{if type==="0"}}selected{{/if}}>寒性</option>
  231. <option value="1" {{if type==="1"}}selected{{/if}}>热性</option>
  232. </select>
  233. </div>
  234. </script>