jobLayoutJs.jsp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398
  1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="utf-8"%>
  2. <%@include file="/WEB-INF/ehr/commons/jsp/commonInclude.jsp" %>
  3. <script src="${contextRoot}/develop/lib/plugin/validate/jValidate.js"></script>
  4. <script>
  5. /* ************************** 全局变量定义 **************************** */
  6. var Util = $.Util;
  7. var schemeVersionList = [];
  8. var validAdd = null;
  9. /* *************************** 自定义模块 ***************************** */
  10. var jobLayout = {
  11. dialog:null,
  12. grid:null,
  13. cacheDatasetIdList:[],
  14. cacheDatasetCodeList:[],
  15. cacheMappingInitData:[],
  16. cacheMappingData:[],
  17. init:function(){
  18. var me = this;
  19. $('.m-retrieve-area').show();
  20. $.ajax({
  21. url: '${contextRoot}/crawler/getSchemeList',
  22. dataType: "json",
  23. success: function (data) {
  24. if(data.successFlg){
  25. schemeVersionList = data.detailModelList || [];
  26. me.loadGrid();
  27. }else{
  28. $.ligerDialog.error(data.message);
  29. }
  30. },
  31. error: function (jqXHR, textStatus, errorThrown) {
  32. $.ligerDialog.error("获取适配方案版本列表失败!")
  33. }
  34. });
  35. me.bindEvents();
  36. },
  37. loadGrid:function(){
  38. var me= this;
  39. this.grid = $("#div_job_grid").ligerGrid({
  40. url: '${contextRoot}/crawler/list',
  41. method: 'post',
  42. selectRowButtonOnly: true,
  43. allowHideColumn:false,
  44. validate : true,
  45. unSetValidateAttr:false,
  46. columns: [
  47. { display: 'status', name: 'status', hide:true },
  48. { display: 'scheme_id', name: 'scheme_id', hide:true },
  49. { display: 'datasetId', name: 'datasetId', hide:true },
  50. {display:'适配方案',name:'', width: '20%',render: function (row, rowindex, value, column) {
  51. var select= '<select class="sel-scheme-name form-control required" id="schemeNm'+rowindex+'" style="margin-top:3px;font-size:12px;">';
  52. for(var i=0;i<schemeVersionList.length;i++){
  53. select+='<option value="'+schemeVersionList[i].schemeId+'">'+schemeVersionList[i].name+'</option>';
  54. }
  55. select = $(select+"</select>");
  56. $('option[value="'+row.scheme_id+'"]',select).attr('selected',true);
  57. return select.prop("outerHTML");
  58. }},
  59. {display:'版本',name:'',width: '20%',render: function (row, rowindex, value, column) {
  60. var select= '<select class="sel-version-name form-control required" data-rowindex="'+rowindex+'" id="versionNm'+rowindex+'" style="margin-top:3px;font-size:12px;">';
  61. var versionList = [];
  62. for(var i=0;i<schemeVersionList.length;i++){
  63. if(schemeVersionList[i].schemeId == row.scheme_id){
  64. versionList = schemeVersionList[i].versionList;
  65. for(var j=0;j<versionList.length;j++){
  66. select+='<option value="'+versionList[j].id+'">'+versionList[j].name+'</option>';
  67. }
  68. }
  69. }
  70. select = $(select+"</select>");
  71. $('option[value="'+row.scheme_version_id+'"]',select).attr('selected',true);
  72. return select.prop("outerHTML");
  73. }},
  74. {display:'数据集名称',name:'datasetName', width: '40%',render: function (row, rowindex, value, column) {
  75. var dataSets = value;
  76. if(value==undefined){
  77. dataSets="";
  78. }else if(value.toString().substring(value.length-1,value.length)==","){
  79. dataSets=value.toString().substring(0,value.length-1);
  80. }
  81. var html = '<input style="margin-top:3px;font-size:12px;" data-rowindex="'+rowindex+'" id="dataSets'+rowindex+'" class="required sel-dataset-name form-control" value="'+(dataSets || "")+'" >' ;
  82. return html;
  83. }},
  84. {display:'操作', name: 'operator', width: '20%', render: function (row, rowindex, value, column) {
  85. var html = '<div class="m-inline-buttons" style="width:120px;">';
  86. html += '<a href="javascript:void(0)" style="width: 80px;" class="mapping" data-rowindex="'+rowindex+'" onclick="javascript:jobLayout.mapping(\''+rowindex+'\')">数据映射</a>';
  87. html += '<a class="m-btn-delete" onclick="javascript:jobLayout.delete(\''+rowindex+'\')"></a>';
  88. return html;
  89. }}
  90. ],
  91. onSuccess:function(data, grid){//成功获取服务器数据的事件
  92. //缓存初始化勾选的数据集id
  93. var detailModelList = data.detailModelList;
  94. for(var i=0;i<detailModelList.length;i++){
  95. me.cacheDatasetIdList[i] = detailModelList[i].datasetId;
  96. me.cacheDatasetCodeList[i]="";
  97. me.cacheMappingInitData[i]="";
  98. me.cacheMappingData[i]="";
  99. }
  100. },
  101. onAfterShowData: function (gridData) {//显示完数据事件
  102. validAdd = new jQuery.jValidation.Validation($("#div_job_grid"),{immediate:true,onSubmit:false});
  103. //【适配方案】change事件
  104. $(".sel-scheme-name").on("change", function() {
  105. var rowIndex = $(this).attr("id").replace("schemeNm","");
  106. var option = "";
  107. var versionList = [];
  108. for(var i=0;i<schemeVersionList.length;i++){
  109. if(schemeVersionList[i].schemeId == $(this).val()){
  110. versionList = schemeVersionList[i].versionList;
  111. for(var j=0;j<versionList.length;j++){
  112. option+='<option value="'+versionList[j].id+'">'+versionList[j].name+'</option>';
  113. }
  114. }
  115. }
  116. $("#versionNm"+rowIndex).html("");
  117. $("#versionNm"+rowIndex).append(option);
  118. //清空值
  119. me.cacheDatasetIdList[rowIndex]="";
  120. me.cacheDatasetCodeList[rowIndex]="";
  121. me.cacheMappingInitData[rowIndex]="";
  122. me.cacheMappingData[rowIndex]="";
  123. $("#dataSets"+rowIndex).val("");
  124. });
  125. //【版本】change事件
  126. $(".sel-version-name").on("change", function() {
  127. var rowIndex = $(this).data("rowindex");
  128. //清空值
  129. me.cacheDatasetIdList[rowIndex]="";
  130. me.cacheDatasetCodeList[rowIndex]="";
  131. me.cacheMappingInitData[rowIndex]="";
  132. me.cacheMappingData[rowIndex]="";
  133. $("#dataSets"+rowIndex).val("");
  134. });
  135. //【数据集名称】focus事件
  136. $(".sel-dataset-name").on("focus", function() {
  137. var rowindex = $(this).attr("data-rowindex");
  138. jobLayout.grid.select(rowindex);//选中行
  139. var selectedVersionId = $("#versionNm"+rowindex).val();
  140. if(selectedVersionId==null){
  141. $.ligerDialog.error("当前版本为空,不能选择数据集!");
  142. return false;
  143. }
  144. /* 判断适配方案与版本是否重复*/
  145. var resultArr = me.getGridData();
  146. var uniqueArr = me.uniqueArray(resultArr);
  147. if(resultArr.length!==uniqueArr.length){
  148. $.ligerDialog.error("相同适配方案下,不能有相同的版本!");
  149. return false;
  150. }
  151. var row = jobLayout.grid.getSelectedRow();
  152. var cacheDatasetId =JSON.stringify(me.cacheDatasetIdList[rowindex]);//获取缓存勾选的数据集
  153. var params = {
  154. schemeId:$("#schemeNm"+rowindex).val(),
  155. versionId: $("#versionNm"+rowindex).val(),
  156. schemeNm:$("#schemeNm"+rowindex).find("option:selected").text(),
  157. cacheDatasetId:cacheDatasetId};
  158. me.dialog = $.ligerDialog.open({
  159. height: 600,
  160. width: 600,
  161. title: "数据集选择器",
  162. url: '${contextRoot}/crawler/datasetDetail',
  163. //load: true,
  164. urlParms: params
  165. });
  166. });
  167. }
  168. });
  169. },
  170. //绑定按钮事件
  171. bindEvents: function () {
  172. var me = this;
  173. $('#btnAdd').click(function () {
  174. me.gridScrollTop();//1、将滚动条滚动到底部
  175. var dataRow = {
  176. status:'',
  177. scheme_id:'',
  178. scheme_version_id:'',
  179. datasetName:'',
  180. datasetId:''
  181. };
  182. var rowData = me.grid.getData();
  183. for (var i = 0; i < rowData.length; i++) {
  184. me.grid.rows[i].scheme_id = $("#schemeNm"+i).val();
  185. me.grid.rows[i].scheme_version_id= $("#versionNm"+i).val();
  186. me.grid.rows[i].datasetName= $("#dataSets"+i).val();
  187. }
  188. //将新添加的行插入到最后一列
  189. me.grid.addRow(dataRow);
  190. $(".sel-scheme-name#schemeNm"+rowData.length).trigger("change");
  191. me.cacheDatasetIdList.push("");
  192. me.cacheDatasetCodeList.push("");
  193. });
  194. $('#btnSave').click(function(){
  195. if(!validAdd.validate()){
  196. return false;
  197. }
  198. var resultArr = me.getGridData();//获取表格数据
  199. $.ajax({
  200. url: "${contextRoot}/crawler/saveDateSet",
  201. type: "post",
  202. dataType: "json",
  203. data:{job: JSON.stringify(resultArr)},
  204. success: function (data) {
  205. if(data.successFlg){
  206. $.ligerDialog.success(data.message);
  207. jobLayout.grid.loadData(true);
  208. }else{
  209. $.ligerDialog.error(data.message);
  210. }
  211. },error:function(){
  212. }
  213. });
  214. });
  215. },
  216. getGridData:function(){
  217. var me = this;
  218. var rowData = this.grid.getData();
  219. var resultArr = [];
  220. for (var i = 0; i < rowData.length; i++) {
  221. var row = {
  222. schemeId:$("#schemeNm"+i).val(),
  223. versionId: $("#versionNm"+i).val(),
  224. dataSets:me.cacheDatasetIdList[i],
  225. relation:me.cacheMappingData[i]}
  226. resultArr.push(row);
  227. }
  228. return resultArr;
  229. },
  230. contains:function(a, e){
  231. for(j=0;j<a.length;j++)if(a[j]==e)return true;
  232. return false;
  233. },
  234. uniqueArray:function(a){ /* 判断适配方案与版本是否重复*/
  235. var temp = new Array();
  236. for(var i = 0; i < a.length; i ++){
  237. if(!this.contains(temp, a[i].schemeId + a[i].versionId)){
  238. temp.length+=1;
  239. temp[temp.length-1] = a[i].schemeId + a[i].versionId;
  240. }
  241. }
  242. return temp;
  243. },
  244. gridScrollTop:function(){
  245. var div = $('#div_job_grid')[0],
  246. scrollHeight = div.scrollHeight;
  247. if( div.scrollTop + div.clientHeight >= div.scrollHeight ){//滚动条已滑动到底部
  248. return false;
  249. }
  250. var scrollTop = div.scrollTop;
  251. var timer= setInterval(function () {
  252. scrollTop += 150;
  253. div.scrollTop = scrollTop;
  254. if (scrollTop >= scrollHeight) clearInterval(timer);}, 100);//滚动到底部,释放计时器
  255. },
  256. //数据映射
  257. mapping:function(rowindex){
  258. var versionId = $("#versionNm"+rowindex).val();
  259. var datasetIdStr = this.cacheDatasetIdList[rowindex]==undefined?"":this.cacheDatasetIdList[rowindex];
  260. if(versionId==null){
  261. $.ligerDialog.error("当前版本为空,不能进行数据映射!");
  262. return false;
  263. }
  264. if( $("#dataSets"+rowindex).val()==""){
  265. $.ligerDialog.error("当前勾选的数据集数据为空,不能进行数据映射!");
  266. return false;
  267. }
  268. var me = this;
  269. var params = {versionId:versionId,datasetIdStr:datasetIdStr};
  270. me.dialog = $.ligerDialog.open({
  271. height: 800,
  272. width: 1200,
  273. title: "数据映射",
  274. url: '${contextRoot}/crawler/jobDataMapping',
  275. //load: true,
  276. urlParms: params
  277. });
  278. },
  279. //删除数据映射
  280. delete:function(rowindex) {
  281. this.grid.select(rowindex);//选中行
  282. var me = this;
  283. var row = me.grid.getSelectedRow();
  284. var rowData = me.grid.getData();
  285. //判断是否是新增的数据。若是新增的数据,则直接删除数据,不发送后台请求
  286. if(row.__status=="add"){
  287. $.ligerDialog.confirm("确定要删除该适配方案数据映射吗?", function (confirm) {
  288. if (confirm)
  289. {
  290. //保存当前编辑的数据
  291. for (var i = 0; i < rowData.length; i++) {
  292. me.grid.rows[i].scheme_id = $("#schemeNm"+i).val();
  293. me.grid.rows[i].scheme_version_id= $("#versionNm"+i).val();
  294. me.grid.rows[i].datasetName= $("#dataSets"+i).val();
  295. }
  296. //删除行缓存的数据
  297. var cacheDatasetIdList = me.cacheDatasetIdList;
  298. var cacheDatasetCodeList = me.cacheDatasetCodeList;
  299. var cacheMappingInitData = me.cacheMappingInitData;
  300. var cacheMappingData = me.cacheMappingData;
  301. cacheDatasetIdList.splice(rowindex,1);
  302. cacheDatasetCodeList.splice(rowindex,1);
  303. cacheMappingInitData.splice(rowindex,1);
  304. cacheMappingData.splice(rowindex,1);
  305. //删除行
  306. me.grid.deleteRow(rowindex);
  307. }
  308. });
  309. }else{
  310. var delVersionId = $("#versionNm"+rowindex).val();
  311. if(delVersionId==null){
  312. $.ligerDialog.error("当前没有选择适配版本,不能删除!");
  313. return false;
  314. }
  315. var addFlag = false;
  316. for (var i = 0; i < rowData.length; i++) {
  317. if(rowData[i].status==""){//新增
  318. addFlag = true;
  319. break;
  320. }
  321. }
  322. if(addFlag){//有新增数据并且未保存
  323. $.ligerDialog.error("当前有未保存的数据,请先保存,再删除");
  324. return false;
  325. }
  326. $.ligerDialog.confirm("确定要删除该适配方案数据映射吗?", function (confirm) {
  327. if (confirm)
  328. {
  329. $.ajax({ //ajax处理
  330. type: "POST",
  331. url : "${contextRoot}/crawler/deleteDateSet",
  332. dataType : "json",
  333. data:{version:delVersionId},
  334. cache:false,
  335. success :function(data){
  336. if(data.successFlg) {
  337. $.ligerDialog.success(data.message);
  338. jobLayout.grid.loadData(true);//重新加载表格数据
  339. }
  340. else{
  341. $.ligerDialog.error(data.message);
  342. }
  343. },
  344. error :function(data){
  345. $.ligerDialog.error("删除失败!");
  346. }
  347. });
  348. }
  349. });
  350. }
  351. },
  352. //弹窗返回消息
  353. callbackDialog:function(message){
  354. $.ligerDialog.success(message);
  355. this.grid.reload();
  356. this.dialog.close();
  357. }
  358. }
  359. $(function () {
  360. jobLayout.init();
  361. });
  362. </script>