jobLayoutJs.jsp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  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. var dataRow = {
  175. status:'',
  176. scheme_id:'',
  177. scheme_version_id:'',
  178. datasetName:'',
  179. datasetId:''
  180. };
  181. var rowData = me.grid.getData();
  182. for (var i = 0; i < rowData.length; i++) {
  183. me.grid.rows[i].scheme_id = $("#schemeNm"+i).val();
  184. me.grid.rows[i].scheme_version_id= $("#versionNm"+i).val();
  185. me.grid.rows[i].datasetName= $("#dataSets"+i).val();
  186. }
  187. //将新添加的行插入到最后一列
  188. me.grid.addRow(dataRow);
  189. $(".sel-scheme-name#schemeNm"+rowData.length).trigger("change");
  190. me.cacheDatasetIdList.push("");
  191. me.cacheDatasetCodeList.push("");
  192. me.gridScrollTop();//1、将滚动条滚动到底部
  193. });
  194. $('#btnSave').click(function(){
  195. if(!validAdd.validate()){
  196. return false;
  197. }
  198. var resultArr = me.getGridData();//获取表格数据
  199. var option = me.grid.options;
  200. $.ajax({
  201. url: "${contextRoot}/crawler/saveDateSet",
  202. type: "post",
  203. dataType: "json",
  204. data:{job: JSON.stringify(resultArr),rows:option.pageSize,page:option.page},
  205. success: function (data) {
  206. if(data.successFlg){
  207. $.ligerDialog.success(data.message);
  208. jobLayout.grid.loadData(true);
  209. }else{
  210. $.ligerDialog.error(data.message);
  211. }
  212. },error:function(){
  213. }
  214. });
  215. });
  216. },
  217. getGridData:function(){
  218. var me = this;
  219. var rowData = this.grid.getData();
  220. var resultArr = [];
  221. for (var i = 0; i < rowData.length; i++) {
  222. var row = {
  223. schemeId:$("#schemeNm"+i).val(),
  224. versionId: $("#versionNm"+i).val(),
  225. dataSets:me.cacheDatasetIdList[i],
  226. relation:me.cacheMappingData[i]}
  227. resultArr.push(row);
  228. }
  229. return resultArr;
  230. },
  231. contains:function(a, e){
  232. for(j=0;j<a.length;j++)if(a[j]==e)return true;
  233. return false;
  234. },
  235. uniqueArray:function(a){ /* 判断适配方案与版本是否重复*/
  236. var temp = new Array();
  237. for(var i = 0; i < a.length; i ++){
  238. if(!this.contains(temp, a[i].schemeId + a[i].versionId)){
  239. temp.length+=1;
  240. temp[temp.length-1] = a[i].schemeId + a[i].versionId;
  241. }
  242. }
  243. return temp;
  244. },
  245. gridScrollTop:function(){
  246. var div = $('#div_job_grid .l-grid-body2')[0],
  247. scrollHeight = div.scrollHeight;
  248. if( div.scrollTop + div.clientHeight >= div.scrollHeight ){//滚动条已滑动到底部
  249. return false;
  250. }
  251. var scrollTop = div.scrollTop;
  252. var timer= setInterval(function () {
  253. scrollTop += 150;
  254. div.scrollTop = scrollTop;
  255. if (scrollTop >= scrollHeight) clearInterval(timer);}, 100);//滚动到底部,释放计时器
  256. },
  257. //数据映射
  258. mapping:function(rowindex){
  259. var versionId = $("#versionNm"+rowindex).val();
  260. var datasetIdStr = this.cacheDatasetIdList[rowindex]==undefined?"":this.cacheDatasetIdList[rowindex];
  261. if(versionId==null){
  262. $.ligerDialog.error("当前版本为空,不能进行数据映射!");
  263. return false;
  264. }
  265. if( $("#dataSets"+rowindex).val()==""){
  266. $.ligerDialog.error("当前勾选的数据集数据为空,不能进行数据映射!");
  267. return false;
  268. }
  269. var me = this;
  270. var params = {versionId:versionId,datasetIdStr:datasetIdStr};
  271. me.dialog = $.ligerDialog.open({
  272. height: 800,
  273. width: 1200,
  274. title: "数据映射",
  275. url: '${contextRoot}/crawler/jobDataMapping',
  276. //load: true,
  277. urlParms: params
  278. });
  279. },
  280. //删除数据映射
  281. delete:function(rowindex) {
  282. this.grid.select(rowindex);//选中行
  283. var me = this;
  284. var row = me.grid.getSelectedRow();
  285. var rowData = me.grid.getData();
  286. //判断是否是新增的数据。若是新增的数据,则直接删除数据,不发送后台请求
  287. if(row.__status=="add"){
  288. $.ligerDialog.confirm("确定要删除该适配方案数据映射吗?", function (confirm) {
  289. if (confirm)
  290. {
  291. //保存当前编辑的数据
  292. for (var i = 0; i < rowData.length; i++) {
  293. me.grid.rows[i].scheme_id = $("#schemeNm"+i).val();
  294. me.grid.rows[i].scheme_version_id= $("#versionNm"+i).val();
  295. me.grid.rows[i].datasetName= $("#dataSets"+i).val();
  296. }
  297. //删除行缓存的数据
  298. var cacheDatasetIdList = me.cacheDatasetIdList;
  299. var cacheDatasetCodeList = me.cacheDatasetCodeList;
  300. var cacheMappingInitData = me.cacheMappingInitData;
  301. var cacheMappingData = me.cacheMappingData;
  302. cacheDatasetIdList.splice(rowindex,1);
  303. cacheDatasetCodeList.splice(rowindex,1);
  304. cacheMappingInitData.splice(rowindex,1);
  305. cacheMappingData.splice(rowindex,1);
  306. //删除行
  307. me.grid.deleteRow(rowindex);
  308. }
  309. });
  310. }else{
  311. var delVersionId = $("#versionNm"+rowindex).val();
  312. if(delVersionId==null){
  313. $.ligerDialog.error("当前没有选择适配版本,不能删除!");
  314. return false;
  315. }
  316. var addFlag = false;
  317. for (var i = 0; i < rowData.length; i++) {
  318. if(rowData[i].status==""){//新增
  319. addFlag = true;
  320. break;
  321. }
  322. }
  323. if(addFlag){//有新增数据并且未保存
  324. $.ligerDialog.error("当前有未保存的数据,请先保存,再删除");
  325. return false;
  326. }
  327. $.ligerDialog.confirm("确定要删除该适配方案数据映射吗?", function (confirm) {
  328. if (confirm)
  329. {
  330. $.ajax({ //ajax处理
  331. type: "POST",
  332. url : "${contextRoot}/crawler/deleteDateSet",
  333. dataType : "json",
  334. data:{version:delVersionId},
  335. cache:false,
  336. success :function(data){
  337. if(data.successFlg) {
  338. $.ligerDialog.success(data.message);
  339. jobLayout.grid.loadData(true);//重新加载表格数据
  340. }
  341. else{
  342. $.ligerDialog.error(data.message);
  343. }
  344. },
  345. error :function(data){
  346. $.ligerDialog.error("删除失败!");
  347. }
  348. });
  349. }
  350. });
  351. }
  352. },
  353. //弹窗返回消息
  354. callbackDialog:function(message){
  355. $.ligerDialog.success(message);
  356. this.grid.reload();
  357. this.dialog.close();
  358. }
  359. }
  360. $(function () {
  361. jobLayout.init();
  362. });
  363. </script>