add.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. <!DOCTYPE html>
  2. <html lang="zh" xmlns:th="http://www.thymeleaf.org" >
  3. <head>
  4. <th:block th:include="include :: header('新增薪金')" />
  5. <th:block th:include="include :: datetimepicker-css" />
  6. </head>
  7. <body class="white-bg">
  8. <div class="wrapper wrapper-content animated fadeInRight ibox-content">
  9. <form class="form-horizontal m" id="form-salary-add">
  10. <h4 class="form-header h4">薪金信息</h4>
  11. <div class="col-xs-12">
  12. <div class="form-group">
  13. <label class="col-sm-3 control-label">用户:</label>
  14. <div class="col-sm-8">
  15. <select class="form-control" name="userId" th:with="users=${@user.getUserList()}">
  16. <option value="">请选择</option>
  17. <option th:each="user : ${users}" th:text="${user.userName}" th:value="${user.userId}"></option>
  18. </select>
  19. </div>
  20. </div>
  21. </div>
  22. <div class="col-xs-12">
  23. <div class="form-group">
  24. <label class="col-sm-3 control-label">薪水分类:</label>
  25. <div class="col-sm-8">
  26. <select name="salaryType" id="salaryType" class="form-control" th:with="type=${@dict.getType('subject_type')}">
  27. <option value="">请选择</option>
  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 class="col-xs-12">
  34. <div class="form-group">
  35. <label class="col-sm-3 control-label">薪金日期:</label>
  36. <div class="col-sm-8">
  37. <div class="input-group date">
  38. <input name="salaryDate" class="form-control" placeholder="yyyy-MM-dd" type="text">
  39. <span class="input-group-addon"><i class="fa fa-calendar"></i></span>
  40. </div>
  41. </div>
  42. </div>
  43. </div>
  44. <div class="col-xs-12">
  45. <div class="form-group">
  46. <label class="col-sm-3 control-label">薪金总金额:</label>
  47. <div class="col-sm-8">
  48. <input name="sumAmount" id="sumAmount" class="form-control" type="text">
  49. </div>
  50. </div>
  51. </div>
  52. <h4 class="form-header h4">薪金明细信息</h4>
  53. <div class="row">
  54. <div class="col-xs-12">
  55. <!-- <button type="button" class="btn btn-white btn-sm" onclick="addRow()"><i class="fa fa-plus"> 增加</i></button>-->
  56. <!-- <button type="button" class="btn btn-white btn-sm" onclick="sub.delRow()"><i class="fa fa-minus"> 删除</i></button>-->
  57. <div class="col-sm-12 select-table table-striped">
  58. <table id="bootstrap-table"></table>
  59. </div>
  60. </div>
  61. </div>
  62. </form>
  63. </div>
  64. <th:block th:include="include :: footer" />
  65. <th:block th:include="include :: datetimepicker-js" />
  66. <script th:inline="javascript">
  67. var baseFlagDatas = [[${@dict.getType('sys_yes_no')}]];
  68. var prefix = ctx + "business/salary"
  69. $("#form-salary-add").validate({
  70. focusCleanup: true
  71. });
  72. function submitHandler() {
  73. if ($.validate.form()) {
  74. console.log($('#form-salary-add').serialize());
  75. $.operate.save(prefix + "/add", $('#form-salary-add').serialize());
  76. }
  77. }
  78. $("input[name='salaryDate']").datetimepicker({
  79. format: "yyyy-mm-dd",
  80. minView: "month",
  81. autoclose: true
  82. });
  83. $(function() {
  84. var options = {
  85. pagination: false,
  86. showSearch: false,
  87. showRefresh: false,
  88. showToggle: false,
  89. showColumns: false,
  90. sidePagination: "client",
  91. columns: [{
  92. checkbox: true
  93. },
  94. {
  95. field: 'index',
  96. align: 'center',
  97. title: "序号",
  98. formatter: function (value, row, index) {
  99. var actions = [];
  100. actions.push($.common.sprintf("<input type='hidden' name='index' value='%s'>", $.table.serialNumber(index)));
  101. actions.push($.common.sprintf("<input class='form-control' type='hidden' name='salaryDetailList[%s].baseFlag' value='%s'>", index, row.baseFlag));
  102. actions.push($.common.sprintf("<input class='form-control' type='hidden' name='salaryDetailList[%s].salarySubjectId' value='%s'>", index, row.salarySubjectId));
  103. return actions.join('') + $.table.serialNumber(index);
  104. }
  105. },
  106. {
  107. field: 'subjectName',
  108. align: 'center',
  109. title: '科目名',
  110. formatter: function(value, row, index) {
  111. var html = $.common.sprintf("<input class='form-control' type='text' name='salaryDetailList[%s].subjectName' value='%s'>", index, value);
  112. return html;
  113. }
  114. },
  115. {
  116. field: 'baseFlag',
  117. title: '基准标记',
  118. visible: false,
  119. formatter: function(value, row, index) {
  120. var html = $.common.sprintf("<input class='form-control' type='text' name='salaryDetailList[%s].baseFlag' value='%s'>", index, value)
  121. return html;
  122. }
  123. },
  124. {
  125. field: 'baseFlagName',
  126. title: '基准标记',
  127. formatter: function(value, row, index) {
  128. return $.table.selectDictLabel(baseFlagDatas, row.baseFlag);
  129. }
  130. },
  131. {
  132. field: 'percent',
  133. title: '占比',
  134. formatter: function(value, row, index) {
  135. var html = $.common.sprintf("<input class='form-control' readonly='readonly' type='text' name='salaryDetailList[%s].percent' value='%s'>", index, value);
  136. return html;
  137. }
  138. },
  139. {
  140. field: 'formula',
  141. title: '公式',
  142. formatter: function(value, row, index) {
  143. var html = $.common.sprintf("<input class='form-control' readonly='readonly' type='text' name='salaryDetailList[%s].formula' value='%s'>", index, value);
  144. return html;
  145. }
  146. },
  147. {
  148. field: 'amount',
  149. align: 'center',
  150. title: '金额',
  151. formatter: function(value, row, index) {
  152. var html = $.common.sprintf("<input class='form-control detail-amount' type='text' name='salaryDetailList[%s].amount' value='%s'>", index, value);
  153. return html;
  154. }
  155. },
  156. {
  157. title: '操作',
  158. align: 'center',
  159. formatter: function(value, row, index) {
  160. var value = $.common.isNotEmpty(row.index) ? row.index : $.table.serialNumber(index);
  161. return '<a class="btn btn-danger btn-xs" href="javascript:void(0)" onclick="sub.delRowByIndex(\'' + value + '\')"><i class="fa fa-remove"></i>删除</a>';
  162. }
  163. }]
  164. };
  165. $.table.init(options);
  166. });
  167. // function addRow() {
  168. // var count = $("#" + table.options.id).bootstrapTable('getData').length;
  169. // var row = {
  170. // index: $.table.serialNumber(count),
  171. // subjectName: "",
  172. // baseFlag: "",
  173. // percent: 0,
  174. // formula: "",
  175. // amount: "",
  176. // }
  177. // sub.addRow(row);
  178. // }
  179. $(document).on("blur", "input[type='text'].detail-amount", function () {
  180. let name = $(this).attr("name");
  181. const index = name.split('[')[1].split(']')[0];
  182. $("#" + table.options.id).bootstrapTable('updateRow', {
  183. index: index, // 你想修改哪行,0表示第一行
  184. row: {
  185. index: $.table.serialNumber(index + 1),
  186. salarySubjectId: $("#" + table.options.id).bootstrapTable('getData')[index].salarySubjectId,
  187. subjectName: $("#" + table.options.id).bootstrapTable('getData')[index].subjectName,
  188. baseFlag: $("#" + table.options.id).bootstrapTable('getData')[index].baseFlag,
  189. percent: $("#" + table.options.id).bootstrapTable('getData')[index].percent,
  190. formula: $("#" + table.options.id).bootstrapTable('getData')[index].formula,
  191. amount: $(this).val(),
  192. }
  193. })
  194. let allData = $("#" + table.options.id).bootstrapTable('getData');
  195. let changeRow = allData[index];
  196. let sumAmt = 0;
  197. if (changeRow.baseFlag === "Y") {
  198. let baseValue = parseFloat(changeRow.amount);
  199. sumAmt = sumAmt + baseValue;
  200. for (let i = 0; i < allData.length; i++) {
  201. if (i != index) {
  202. let curRow = allData[i];
  203. let curAmt = 0;
  204. if ($.common.isEmpty(curRow.formula)) {
  205. // 使用percent计算
  206. let curPercent = parseFloat(curRow.percent) || 0;
  207. curAmt = (baseValue * curPercent / 100).toFixed(2);
  208. } else {
  209. // 使用formula计算
  210. curAmt = eval(curRow.formula).toFixed(2);
  211. }
  212. sumAmt = sumAmt + parseFloat(curAmt);
  213. $("#" + table.options.id).bootstrapTable('updateRow', {
  214. index: i, // 你想修改哪行,0表示第一行
  215. row: {
  216. index: $.table.serialNumber(i+1),
  217. salarySubjectId: curRow.salarySubjectId,
  218. subjectName: curRow.subjectName,
  219. baseFlag: curRow.baseFlag,
  220. percent: curRow.percent,
  221. formula: curRow.formula,
  222. amount: curAmt,
  223. }
  224. })
  225. }
  226. }
  227. }
  228. $("#sumAmount").val(sumAmt);
  229. });
  230. $("#salaryType").blur(function(){
  231. $("#" + table.options.id).bootstrapTable('removeAll');
  232. $.ajax({
  233. url: ctx + "business/subject/getlist/" + $("#salaryType").val(),
  234. type: "get",
  235. processData: false,
  236. contentType: false,
  237. beforeSend: function () {
  238. $.modal.loading("正在处理中,请稍后...");
  239. $.modal.disable();
  240. },
  241. success: function (result) {
  242. if (result.code === web_status.SUCCESS) {
  243. console.log(result.rows);
  244. if (result.rows.length > 0) {
  245. for (var i = 0; i < result.rows.length; i++) {
  246. var count = $("#" + table.options.id).bootstrapTable('getData').length;
  247. var row = {
  248. index: $.table.serialNumber(count),
  249. salarySubjectId: result.rows[i].salarySubjectId,
  250. subjectName: result.rows[i].subjectName,
  251. baseFlag: result.rows[i].baseFlag,
  252. percent: result.rows[i].percent,
  253. formula: result.rows[i].formula,
  254. amount: "0",
  255. }
  256. console.log(row);
  257. sub.addRow(row);
  258. }
  259. }
  260. // $.modal.alertSuccess(result.msg)
  261. } else if (result.code === web_status.WARNING) {
  262. $.modal.alertWarning(result.msg)
  263. } else {
  264. $.modal.alertError(result.msg);
  265. }
  266. $.modal.closeLoading();
  267. $.modal.enable();
  268. }
  269. })
  270. });
  271. </script>
  272. </body>
  273. </html>