index.html 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8"/>
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  6. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  7. <title>绩效考核配置</title>
  8. <link rel="stylesheet" href="../../../assets/libs/layui/css/layui.css"/>
  9. <link rel="stylesheet" href="../../../assets/module/admin.css?v=312"/>
  10. <style>
  11. .layui-table-cell {
  12. height: auto;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <!-- 页面加载loading -->
  18. <div class="page-loading">
  19. <div class="ball-loader">
  20. <span></span><span></span><span></span><span></span>
  21. </div>
  22. </div>
  23. <!-- 正文开始 -->
  24. <div class="layui-fluid">
  25. <div class="layui-card">
  26. <div class="layui-card-body">
  27. <div class="layui-form toolbar">
  28. <div class="layui-form-item text-center" style="max-width: 700px;margin-left: 20%;">
  29. <form class="layui-form" lay-filter="layuiForm" style="max-width: 700px;margin: 40px auto;">
  30. <!--<div class="layui-form-item">-->
  31. <!--<div class="layui-input-block w-m190">-->
  32. <!--<input type="radio" name="modelSetting" id="setting1" value="" lay-filter="modelSetting" title="考核模式(配置周期、初始分)">-->
  33. <!--<input type="radio" name="modelSetting" id="setting2" value="" lay-filter="modelSetting" title="积分模式(累计计分,无初始分)">-->
  34. <!--</div>-->
  35. <!--</div>-->
  36. <div class="layui-form-item m-top10px">
  37. <label class="layui-form-label w-width150">
  38. <span class="layui-badge-dot"></span>绩效模式
  39. </label>
  40. <div class="layui-input-block w-m180">
  41. <input type="radio" name="modelSetting" id="setting1" value="" lay-filter="modelSetting" title="考核模式(配置周期、初始分)">
  42. <input type="radio" name="modelSetting" id="setting2" value="" lay-filter="modelSetting" title="积分模式(累计计分,无初始分)">
  43. </div>
  44. </div>
  45. <div id="modelType" class="display-none">
  46. <!--<div class="layui-form-item m-top10px">-->
  47. <!--<label class="layui-form-label w-width150">开始日期:</label>-->
  48. <!--<div class="layui-input-block w-m180">-->
  49. <!--<input name="startTime" id="startTime" type="text" placeholder="开始日期" class="layui-input"-->
  50. <!--&gt;-->
  51. <!--</div>-->
  52. <!--</div>-->
  53. <div class="layui-form-item">
  54. <label class="layui-form-label w-width150">
  55. <span class="layui-badge-dot"></span>周期起始日
  56. </label>
  57. <div class="layui-input-block w-m180 statt-time-str" style="width: 500px;">
  58. <!--<input type="radio" name="startTimeStr" value="1" title="01">-->
  59. <!--<input type="radio" name="startTimeStr" value="2" title="02">-->
  60. <!--<input type="radio" name="startTimeStr" value="3" title="03">-->
  61. <!--<input type="radio" name="startTimeStr" value="4" title="04">-->
  62. <!--<input type="radio" name="startTimeStr" value="5" title="05">-->
  63. <!--<input type="radio" name="startTimeStr" value="6" title="06">-->
  64. <!--<input type="radio" name="startTimeStr" value="7" title="07">-->
  65. <!--<input type="radio" name="startTimeStr" value="8" title="08">-->
  66. <!--<input type="radio" name="startTimeStr" value="9" title="09">-->
  67. <!--<input type="radio" name="startTimeStr" value="10" title="10">-->
  68. <!--<input type="radio" name="startTimeStr" value="11" title="11">-->
  69. <!--<input type="radio" name="startTimeStr" value="12" title="12">-->
  70. <!--<input type="radio" name="startTimeStr" value="13" title="13">-->
  71. <!--<input type="radio" name="startTimeStr" value="14" title="14">-->
  72. <!--<input type="radio" name="startTimeStr" value="15" title="15">-->
  73. <!--<input type="radio" name="startTimeStr" value="16" title="16">-->
  74. <!--<input type="radio" name="startTimeStr" value="17" title="17">-->
  75. <!--<input type="radio" name="startTimeStr" value="18" title="18">-->
  76. <!--<input type="radio" name="startTimeStr" value="19" title="19">-->
  77. <!--<input type="radio" name="startTimeStr" value="20" title="20">-->
  78. <!--<input type="radio" name="startTimeStr" value="21" title="21">-->
  79. <!--<input type="radio" name="startTimeStr" value="22" title="22">-->
  80. <!--<input type="radio" name="startTimeStr" value="23" title="23">-->
  81. <!--<input type="radio" name="startTimeStr" value="24" title="24">-->
  82. <!--<input type="radio" name="startTimeStr" value="25" title="25">-->
  83. <!--<input type="radio" name="startTimeStr" value="26" title="26">-->
  84. <!--<input type="radio" name="startTimeStr" value="27" title="27">-->
  85. <!--<input type="radio" name="startTimeStr" value="28" title="28">-->
  86. </div>
  87. <div class="layui-input-block w-m180" style="width: 500px;color: red">
  88. 自定义开始日范围为每个月的1号-28号(开始日起叠加一个月为一个周期)
  89. </div>
  90. </div>
  91. <!--<div class="layui-form-item m-top10px">-->
  92. <!--<label class="layui-form-label w-width150">结束日期:</label>-->
  93. <!--<div class="layui-input-block w-m180">-->
  94. <!--<input name="endTime" id="endTime" type="text" placeholder="结束日期" class="layui-input"-->
  95. <!--&gt;-->
  96. <!--</div>-->
  97. <!--</div>-->
  98. <div class="layui-form-item m-top10px">
  99. <label class="layui-form-label w-width150">考核初始分</label>
  100. <div class="layui-input-block w-m180">
  101. <input name="initScore" id="initScore" type="number" min="0" class="layui-input" onKeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)))" >
  102. </div>
  103. </div>
  104. </div>
  105. <div class="layui-form-item m-top10px">
  106. <div class="layui-input-block w-m180">
  107. <button class="layui-btn bg-c-add" lay-filter="formSubmitBas" lay-submit>&emsp;保存配置&emsp;</button>
  108. </div>
  109. </div>
  110. </form>
  111. </div>
  112. </div>
  113. <div class="layui-card-body">
  114. <div class="layui-tab layui-tab-brief" lay-filter="demo">
  115. <ul class="layui-tab-title">
  116. <li class="layui-this" lay-id="addsocre">加分规则</li>
  117. <li lay-id="deduct">扣分规则</li>
  118. </ul>
  119. <div class="layui-tab-content" style="min-height: 500px">
  120. <div class="layui-tab-item layui-show">
  121. <table class="layui-table" id="addScoreTable" lay-filter="addScoreTable"></table>
  122. </div>
  123. <div class="layui-tab-item">
  124. <table class="layui-table" id="deductTable" lay-filter="deductTable"></table>
  125. </div>
  126. </div>
  127. </div>
  128. </div>
  129. </div>
  130. </div>
  131. </div>
  132. <!-- js部分 -->
  133. <script type="text/javascript" src="../../../assets/libs/layui/layui.js"></script>
  134. <script type="text/javascript" src="../../../assets/js/common.js?v=312"></script>
  135. <script type="text/javascript" src="../../../assets/libs/jquery/jquery-3.2.1.min.js"></script>
  136. <script>
  137. layui.use(['layer', 'form', 'table', 'admin','uParas','element','laydate'], function () {
  138. var $ = layui.jquery;
  139. var layer = layui.layer;
  140. var form = layui.form;
  141. var table = layui.table;
  142. var admin = layui.admin;
  143. var laydate = layui.laydate;
  144. var uParas = layui.uParas;
  145. var element = layui.element; //Tab的切换功能,切换事件监听等,需要依赖element模块
  146. var addSocreTb ,deductScoreTb;
  147. var thisShow = 'addsocre';
  148. var performanceId;
  149. var performanceId_type;
  150. // /*周期*/
  151. // laydate.render({
  152. // elem: '#startTime',
  153. // format: 'yyyy-MM-dd',
  154. // type: 'date',
  155. // min:'date',
  156. // });
  157. /*开始日期*/
  158. $(".statt-time-str").html("");
  159. for(var i = 1; i < 29; i++){
  160. var html = "";
  161. var timeStr = i;
  162. if(i < 10){
  163. timeStr = "0"+i;
  164. }
  165. html = '<input type="radio" id="'+ timeStr +'" name="startTimeStr" value="'+ timeStr +'" title="'+ timeStr +'">';
  166. $(".statt-time-str").append(html);
  167. form.render();
  168. };
  169. /**/
  170. getModelSetting();
  171. renderaddsocreTable();
  172. // 渲染加分规则的表格
  173. function renderaddsocreTable() {
  174. addSocreTb = table.render({
  175. elem : '#addScoreTable',
  176. url : uParas.baseUrl + '/ent/performanceScoreSetting/queryByScoreSettingPage',
  177. where: {settingType:1,},
  178. page : true,
  179. method:'GET',
  180. height:260,
  181. cellMinWidth: 100,
  182. cols : [[
  183. {type : 'numbers' , title :'序号'} ,
  184. {field: 'scoreItemName' , sort:false , title:'打分项目' , width:200},
  185. // {field: 'scoreItemDesc' , sort:false , title:'项目描述' },
  186. // {field: 'settingType' ,
  187. // sort:false ,
  188. // width: 100,
  189. // title:'打分方式' ,
  190. // templet: function (d) {
  191. // return setSettingType(d.settingType);
  192. // }
  193. // },
  194. { field: 'settingScore' ,
  195. sort:false ,
  196. title:'打分标准',
  197. templet: function (d) {
  198. return setSettingScore(d.performanceId,d.scoreItemDesc,d.settingScore,d.settingType);
  199. }
  200. },
  201. {
  202. field: 'settingStatus' ,
  203. sort:false ,
  204. width: 200,
  205. align: 'center',
  206. title:'项目状态',
  207. templet: function (d) {
  208. return setSettingStatus(d.performanceId,d.settingStatus);
  209. }
  210. },
  211. ]]
  212. });
  213. }
  214. // 渲染扣分规则表格
  215. function renderdeductTable() {
  216. deductScoreTb = table.render({
  217. elem : '#deductTable',
  218. url : uParas.baseUrl + '/ent/performanceScoreSetting/queryByScoreSettingPage',
  219. where: {settingType:2,},
  220. page : true,
  221. method:'GET',
  222. height:260,
  223. cellMinWidth: 100,
  224. cols : [[
  225. {type : 'numbers' , title :'序号'} ,
  226. {field: 'scoreItemName' , sort:false , title:'打分项目' , width:200},
  227. // {field: 'scoreItemDesc' , sort:false , title:'项目描述' },
  228. // { field: 'settingType' ,
  229. // sort:false ,
  230. // width: 100,
  231. // title:'打分方式' ,
  232. // templet: function (d) {
  233. // return setSettingType(d.settingType);
  234. // }
  235. // },
  236. { field: 'settingScore' ,
  237. sort:false ,
  238. title:'打分标准',
  239. templet: function (d) {
  240. return setSettingScore(d.performanceId,d.scoreItemDesc,d.settingScore,d.settingType);
  241. }
  242. },
  243. {
  244. field: 'settingStatus' ,
  245. sort:false ,
  246. width: 200,
  247. align: 'center',
  248. title:'项目状态',
  249. templet: function (d) {
  250. return setSettingStatus(d.performanceId,d.settingStatus);
  251. }
  252. },
  253. ]]
  254. });
  255. }
  256. function setSettingType(settingType) {
  257. var title = '';
  258. if (settingType == 1) {
  259. title = '加分';
  260. }else if (settingType == 2) {
  261. title = '扣分';
  262. }
  263. return title;
  264. }
  265. function setSettingScore(performanceId,scoreItemDesc, settingScore, settingType) {
  266. var opts = '<span style="color: #b69100">' + scoreItemDesc+ '&nbsp;&nbsp;&nbsp;&nbsp;</span>';
  267. if(settingType == 1){
  268. opts += ' 加 ';
  269. }else if(settingType == 2){
  270. opts += ' 扣 ';
  271. }
  272. opts += '<input name="settingScore" onKeypress="return (/[\\d]/.test(String.fromCharCode(event.keyCode)))" min="0" max="100" maxlength="2" id="'+performanceId+'" style="width: 50px;" type="number" value="'+ settingScore +'"> 分' +
  273. '&nbsp;&nbsp;&nbsp;&nbsp;<a class="layui-btn layui-btn-xs bg-c-add" lay-event="edit">保存</a>';
  274. return opts;
  275. }
  276. function setSettingStatus(performanceId,settingStatus) {
  277. var opts = '';
  278. if(settingStatus == 1){
  279. opts += '<a lay-event="openStatus">';
  280. opts += '<input type="checkbox" checked="" name="open" lay-text="开|关" lay-skin="switch"><div class="layui-unselect layui-form-switch" lay-skin="_switch"><em>开</em><i></i></div>';
  281. opts += '</a>';
  282. }else if(settingStatus == 0){
  283. opts += '<a lay-event="closeStatus">';
  284. opts += '<input type="checkbox" name="close" lay-skin="switch" lay-text="开|关"><div class="layui-unselect layui-form-switch bg-c-submit" lay-skin="_switch"><em>关</em><i></i></div>';
  285. opts += '</a>';
  286. }
  287. return opts;
  288. }
  289. /*扣分修改*/
  290. table.on('tool(deductTable)', function (obj) {
  291. var data = obj.data;
  292. var layEvent = obj.event;
  293. if (layEvent == 'edit') { // 修改
  294. var score = $("#"+data.performanceId).val();
  295. TASKClickFunction_save(data.performanceId,score)
  296. }else if(layEvent == 'openStatus'){ //打开
  297. TASKClickFunction_saveStatus(data.performanceId,data.settingStatus);
  298. }else if(layEvent == 'closeStatus'){ //关闭
  299. TASKClickFunction_saveStatus(data.performanceId,data.settingStatus);
  300. }
  301. });
  302. /*加分修改*/
  303. table.on('tool(addScoreTable)', function (obj) {
  304. var data = obj.data;
  305. var layEvent = obj.event;
  306. if (layEvent == 'edit') { // 修改
  307. var score = $("#"+data.performanceId).val();
  308. TASKClickFunction_save(data.performanceId,score)
  309. }else if(layEvent == 'openStatus'){ //打开
  310. TASKClickFunction_saveStatus(data.performanceId,data.settingStatus);
  311. }else if(layEvent == 'closeStatus'){ //关闭
  312. TASKClickFunction_saveStatus(data.performanceId,data.settingStatus);
  313. }
  314. });
  315. // 查询考核模式配置
  316. function getModelSetting() {
  317. layer.load(2, { shade: [0.15, '#cccccc'] });
  318. admin.req(uParas.baseUrl + "/ent/performanceScoreSetting/getModelSetting",
  319. {},function (res) {
  320. layer.closeAll('loading');
  321. if (res.code == 1) {
  322. var dataMap = res.data;
  323. if (dataMap.settingType1 == 1){//考核模式
  324. performanceId_type = dataMap.setting1.performanceId;
  325. $("#setting1").val(dataMap.setting1.performanceId);
  326. if(dataMap.setting1.settingStatus == 1){
  327. performanceId = dataMap.setting1.performanceId;
  328. $("#setting1").next().click();
  329. $("#initScore").val(dataMap.initScore);
  330. $("#modelType").show();
  331. //debugger;
  332. /*开始日期*/
  333. $(".statt-time-str").html("");
  334. for(var i = 1; i < 29; i++){
  335. var html = "";
  336. var timeStr = i;
  337. if(i < 10){
  338. timeStr = "0"+i;
  339. }
  340. if(timeStr.toString() == dataMap.startTimeStr){
  341. html = '<input checked="checked" type="radio" id="'+ timeStr +'" name="startTimeStr" value="'+ timeStr +'" title="'+ timeStr +'">';
  342. }else{
  343. html = '<input type="radio" id="'+ timeStr +'" name="startTimeStr" value="'+ timeStr +'" title="'+ timeStr +'">';
  344. }
  345. $(".statt-time-str").append(html);
  346. form.render();
  347. }
  348. }
  349. }if (dataMap.settingType2 == 2){//积分模式
  350. $("#setting2").val(dataMap.setting2.performanceId);
  351. if(dataMap.setting2.settingStatus == 1){
  352. performanceId = dataMap.setting2.performanceId;
  353. $("#initScore").val(0);
  354. $("#setting2").next().click();
  355. }
  356. }
  357. } else {
  358. layer.msg(res.msg);
  359. }
  360. },'GET');
  361. }
  362. // 修改标准分
  363. function TASKClickFunction_save(performanceId,score) {
  364. var hint = "确认保存?";
  365. layer.confirm(hint, {
  366. skin: 'layui-layer-admin',
  367. shade: .1
  368. }
  369. , function (i) {
  370. layer.close(i);
  371. layer.load(2, { shade: [0.15, '#cccccc'] });
  372. admin.req(uParas.baseUrl + "/ent/performanceScoreSetting/saveScore",
  373. {id:performanceId,score:score},function (res) {
  374. layer.closeAll('loading');
  375. if (res.code == 1) {
  376. layer.msg(res.msg);
  377. if (thisShow == 'addsocre'){
  378. renderaddsocreTable();
  379. } else{
  380. renderdeductTable();
  381. }
  382. } else {
  383. layer.msg(res.msg);
  384. }
  385. },'POST');
  386. });
  387. }
  388. // 关闭/打开
  389. function TASKClickFunction_saveStatus(performanceId,status) {
  390. var hint = "确认关闭?";
  391. if(status == 0){
  392. hint = "确认开启?";
  393. }
  394. layer.confirm(hint, {
  395. skin: 'layui-layer-admin',
  396. shade: .1
  397. }
  398. , function (i) {
  399. layer.close(i);
  400. layer.load(2, { shade: [0.15, '#cccccc'] });
  401. admin.req(uParas.baseUrl + "/ent/performanceScoreSetting/saveStatus",
  402. {id:performanceId},function (res) {
  403. if (res.code == 1) {
  404. layer.msg(res.msg);
  405. if (thisShow == 'addsocre'){
  406. renderaddsocreTable();
  407. } else{
  408. renderdeductTable();
  409. }
  410. layer.closeAll('loading');
  411. } else {
  412. layer.msg(res.msg);
  413. }
  414. },'POST');
  415. });
  416. }
  417. //单选框监听()
  418. form.on("radio(modelSetting)", function (data) {
  419. performanceId = this.value;
  420. if(performanceId_type == this.value){
  421. $("#modelType").show();
  422. $("#startTime").attr("lay-verify", 'required');
  423. $("#startTime").attr("lay-verType", 'tips');
  424. }else{
  425. $("#modelType").hide();
  426. $("#startTime").removeAttr("lay-verify", 'required');
  427. $("#startTime").removeAttr("lay-verType", 'tips');
  428. }
  429. });
  430. /**
  431. * 保存配置
  432. */
  433. form.on('submit(formSubmitBas)', function (data) {
  434. layer.load(2, { shade: [0.15, '#cccccc'] });
  435. // 表格选择的数据放到data.field中
  436. data.field.id = performanceId;
  437. admin.req(uParas.baseUrl + '/ent/performanceScoreSetting/saveModelSetting', data.field, function (resp) {
  438. if (resp.code == 1) {
  439. layer.msg(resp.msg);
  440. getModelSetting();
  441. } else {
  442. layer.msg(resp.msg)
  443. }
  444. layer.closeAll('loading');
  445. }, 'POST');
  446. return false;
  447. });
  448. //tab切换监听
  449. element.on('tab(demo)', function(data){
  450. if (data.index == 0){
  451. renderaddsocreTable();
  452. thisShow = 'addsocre';
  453. } else if(data.index == 1){
  454. renderdeductTable();
  455. thisShow = 'deduct';
  456. }
  457. });
  458. });
  459. </script>
  460. </body>
  461. </html>