resumeAnalysis.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830
  1. //var interval = 0;
  2. //var code, code1, code2, code3;
  3. var SUCCESS_CODE = 0;
  4. /**
  5. *@description 简历解析
  6. */
  7. function resumeAnalysis(that) {
  8. // 简历解析状态
  9. var ANALYSIS_TODO = 1; //待解析 SAVED 1
  10. var ANALYSIS_SUCCESS = 7; //解析成功 FINISHED 7
  11. var ANALYSIS_FAIL = 8; //解析失败 ERROR 8
  12. // 简历解析任务状态
  13. var NOT_START = 1; //上传简历 SAVED 1
  14. var SUBMITED = 2; //提交解析 SUBMITED 2
  15. var EXECUTING = 4; //开始解析 RUNNING 4
  16. var FINISHED = 7; //解析完成 FINISHED 7
  17. var TIMEOUT = 9; //解析超时 TIMEOUT 9
  18. // 任务ID
  19. var taskId = "";
  20. var targetId = '';
  21. //上次解析结束任务
  22. var lastTaskId = "";
  23. var lastAffirm = false;
  24. var isDialogShow = false;
  25. var analyzeTodoList = [];
  26. var analyzeSucceedList = [];
  27. var analyzeFailList = [];
  28. var analysisProgressTimer;
  29. var pageUIPK='';
  30. // 模态框
  31. var analysisModal = {
  32. show: false,
  33. init: function() {
  34. analyzeTodoList = [];
  35. analyzeSucceedList = [];
  36. analyzeFailList = [];
  37. analysisModal.analysisTab($('.analysis-success'));
  38. analysisModal.analysisTab($('.analysis-failure'));
  39. analysisModal.analysisTab($('.analysis-todo'));
  40. $('.doneAmount').text(0);
  41. $('.resumeAmount').text(0);
  42. $('.failedAmount').text(0);
  43. $('.successedAmount').text(0);
  44. $('.todoAmount').text(0);
  45. },
  46. hidePanel: function() {
  47. $('.analysis-panel').hide();
  48. },
  49. showAnalysisPanel: function() {
  50. this.hidePanel();
  51. $('.some-resume').show();
  52. $('.some-resume').removeClass('some-resume-hide');
  53. },
  54. compileResumeList: function(id, data) {
  55. var myTemplate = Handlebars.compile($("#handlebars-template").html());
  56. Handlebars.registerHelper("analyzeSucceed", function (x, options) {
  57. if (x === ANALYSIS_SUCCESS) {
  58. return options.fn(this);
  59. } else {
  60. return options.inverse(this);
  61. }
  62. })
  63. Handlebars.registerHelper("formatState", function (state, options) {
  64. if (state === ANALYSIS_TODO) {
  65. return '待解析';
  66. } else if (state === ANALYSIS_SUCCESS) {
  67. return state;
  68. } else if (state === ANALYSIS_FAIL) {
  69. return options.data.root.resumes[options.data.index].info;
  70. } else {
  71. return '解析失败';
  72. }
  73. })
  74. if(data.resumes.length == 0) {
  75. switch(id) {
  76. case 'inputcontainer':
  77. data = {
  78. resumes:false,
  79. des:'你没有待解析的简历哦'
  80. }
  81. $('#startAnalyze, #clearResumeList').attr('disabled', 'true').addClass('disabled');
  82. break;
  83. case 'resume-list-success':
  84. data = {
  85. resumes:false,
  86. des:'你还没有解析成功的简历哦'
  87. }
  88. break;
  89. case 'resume-list-failure':
  90. data = {
  91. resumes:false,
  92. des:'恭喜,你没有解析失败的简历哦'
  93. }
  94. }
  95. }else{
  96. $('#_resumeAnalysisDiv,#_resumeAnalysisDiv2,#_resumeAnalysisDiv3,#_resumeAnalysisDiv4,.shrTooltip, #viewLog').show();
  97. }
  98. $('#' + id).html(myTemplate(data));
  99. },
  100. analysisTab: function(dom) {
  101. var tabClassName = $(dom).attr('class').replace(' tab-current', '');
  102. switch (tabClassName) {
  103. case 'analysis-todo':
  104. this.compileResumeList('inputcontainer', { resumes: analyzeTodoList });
  105. break;
  106. case 'analysis-success':
  107. this.compileResumeList('resume-list-success', { resumes: analyzeSucceedList });
  108. break;
  109. case 'analysis-failure':
  110. this.compileResumeList('resume-list-failure', { resumes: analyzeFailList });
  111. break;
  112. default:
  113. break;
  114. }
  115. // tab 样式
  116. $('.analysis-tab button').removeClass('tab-current');
  117. $(dom).addClass('tab-current');
  118. // tab-ct 样式
  119. var tabClassName = $(dom).attr('class').replace(' tab-current', '');
  120. $('.tab-ct-current').removeClass('tab-ct-current');
  121. $('.' + tabClassName + '-ct').addClass('tab-ct-current');
  122. $('#_resumeAnalysisDiv,#_resumeAnalysisDiv2,#_resumeAnalysisDiv3,#_resumeAnalysisDiv4,#_resumeAnalysisDiv5,#_resumeAnalysisDiv6,.shrTooltip, #viewLog').show();
  123. },
  124. startAnalyze: function() {
  125. var param = {taskId: taskId};
  126. var val = $("#recuritmentDemand").shrPromptBox("getValue");
  127. //判断checkbox类型isKeyTalent是否选中
  128. var isKeyTalent = $("#isKeyTalent").is(':checked');
  129. var phoneModifyValue = $("#phoneModify").val();
  130. var count = $('#inputcontainer .resume-list').length;
  131. param.isKeyTalent = isKeyTalent;
  132. param.phoneModify = phoneModifyValue;
  133. if (pageUIPK == 'com.kingdee.shr.recuritment.resumeScreening' && count > 1 && (phoneModifyValue || isKeyTalent)) {
  134. let meg = '当选择重点人才或需更新手机号时,只能同时解析单份简历.';
  135. shr.showWarning({
  136. message: meg,
  137. hideAfter: 3
  138. })
  139. return false;
  140. }
  141. if(val){
  142. targetId = val.id;
  143. param.targetId = targetId;
  144. param.taskId = taskId;
  145. }else{
  146. var meg = '';
  147. if(pageUIPK == 'com.kingdee.shr.recuritment.resumeScreening'||pageUIPK == 'com.kingdee.shr.recuritment.app.RecommendRecord.list'||pageUIPK == 'com.kingdee.shr.recuritment.app.ResumeBaseRec.selfUploadDemand.list'){
  148. meg = '请选择招聘需求';
  149. }else if(pageUIPK == 'com.kingdee.shr.recuritment.talentPool'||pageUIPK=='com.kingdee.shr.recuritment.app.ResumeBaseRec.selfUploadEnterPriseArchives.list'){
  150. meg = '请选择目标简历夹';
  151. }
  152. shr.showWarning({
  153. message: meg,
  154. hideAfter: 3
  155. })
  156. return false;
  157. }
  158. //简历来源
  159. var _resumeSource = $("#resumeSource").shrPromptBox("getValue");
  160. if(_resumeSource && _resumeSource.id){
  161. param.resumeSourceId=_resumeSource.id;
  162. }
  163. val = $("#interRecommendation").shrPromptBox("getValue");
  164. if(!val&&pageUIPK=='com.kingdee.shr.recuritment.app.RecommendRecord.list'){
  165. meg = '请选择内部推荐人';
  166. shr.showWarning({
  167. message: meg,
  168. hideAfter: 3
  169. })
  170. return false;
  171. }
  172. if(_resumeSource&&_resumeSource.name=="内部推荐"&&!val){
  173. meg = '选择内部推荐必须选择内部推荐人';
  174. shr.showWarning({
  175. message: meg,
  176. hideAfter: 3
  177. })
  178. return false;
  179. }
  180. if(val && val.id){
  181. param.interRecommendationId=val.id;
  182. }
  183. val = $("#sourceType").shrSelect('getValue').value;
  184. if(val){
  185. param.sourceType=val;
  186. }
  187. $('#restartUpload').parent('.button-wrapper').css('visibility','hidden');
  188. that.remoteCall({
  189. method: 'resumeAnalysis',
  190. param: param,
  191. success: function(response) {
  192. if(response.code == SUCCESS_CODE) {
  193. $('.analysis-progress,.modal-header .min').show();
  194. $('#startAnalyze, #clearResumeList').attr('disabled', 'true').addClass('disabled');
  195. $('.upload-btn').attr('disabled', 'true').addClass('disabled').css('z-index', '200');
  196. $("#recuritmentDemand").shrPromptBox("disable");
  197. $("#interRecommendation").shrPromptBox("disable");
  198. $("#resumeSource").shrPromptBox("disable");
  199. $("#sourceType").shrSelect("disable");
  200. initCntroller.getAnalysisProgress();
  201. }
  202. if(response.code != 0) {
  203. shr.showError({
  204. message:response.mesg,
  205. hideAfter:3
  206. });
  207. return false;
  208. }
  209. }
  210. })
  211. },
  212. clearTodo: function() {
  213. var resumeId = [];
  214. for(var i = 0; i < analyzeTodoList.length; i++){
  215. resumeId.push(analyzeTodoList[i].id);
  216. }
  217. that.remoteCall({
  218. method: 'deleteUploadResume',
  219. param: {
  220. deleteResumeIds:resumeId.join(',')
  221. },
  222. success: function(response) {
  223. if(response.code == SUCCESS_CODE) {
  224. $('.todoAmount').text(0);
  225. analyzeTodoList = []
  226. analysisModal.analysisTab($('.analysis-todo'));
  227. }
  228. if(response.code != 0) {
  229. shr.showError({
  230. message:response.mesg,
  231. hideAfter:3
  232. });
  233. return false;
  234. }
  235. }
  236. })
  237. },
  238. clearFailed: function() {
  239. var resumeId = [];
  240. for(var i = 0; i < analyzeFailList.length; i++){
  241. resumeId.push(analyzeFailList[i].id);
  242. }
  243. that.remoteCall({
  244. method: 'deleteUploadResume',
  245. param: {
  246. deleteResumeIds:resumeId.join(',')
  247. },
  248. success: function(response) {
  249. if(response.code == SUCCESS_CODE) {
  250. analyzeFailList = [];
  251. analysisModal.analysisTab($('.analysis-failure'));
  252. $('.failedAmount').text(0);
  253. $('#restartUpload').parent('.button-wrapper').css('visibility','hidden');
  254. }
  255. if(response.code != 0) {
  256. shr.showError({
  257. message:response.mesg,
  258. hideAfter:3
  259. });
  260. return false;
  261. }
  262. }
  263. })
  264. },
  265. deleteResume: function(){
  266. var resumeId = $(this).find('a').attr('resume-id');
  267. that.remoteCall({
  268. method: 'deleteUploadResume',
  269. param: {
  270. deleteResumeIds: resumeId
  271. },
  272. success: function(response) {
  273. if(response.code == SUCCESS_CODE) {
  274. if($('.tab-ct-current').hasClass('analysis-failure-ct')){
  275. for(var i = 0; i < analyzeFailList.length; i++ ){
  276. if(analyzeFailList[i].id == resumeId){
  277. analyzeFailList.splice(i, 1);
  278. break;
  279. }
  280. }
  281. analysisModal.analysisTab($('.analysis-failure'));
  282. $('.failedAmount').text(analyzeFailList.length);
  283. if(analyzeFailList.length == 0) {
  284. $('#restartUpload').parent('.button-wrapper').css('visibility','hidden');
  285. }
  286. }else if($('.tab-ct-current').hasClass('analysis-todo-ct')){
  287. for(var i = 0; i < analyzeTodoList.length; i++ ){
  288. if(analyzeTodoList[i].id == resumeId){
  289. analyzeTodoList.splice(i, 1);
  290. break;
  291. }
  292. }
  293. analysisModal.analysisTab($('.analysis-todo'));
  294. $('.todoAmount').text(analyzeTodoList.length);
  295. }
  296. }
  297. if(response.code != 0) {
  298. shr.showError({
  299. message:response.mesg,
  300. hideAfter:3
  301. });
  302. return false;
  303. }
  304. }
  305. })
  306. },
  307. restartAnalyze: function() {
  308. if(analyzeFailList.length === 0) {
  309. shr.showWarning({
  310. message: '您没有解析错误的简历哦',
  311. hideAfter: 5
  312. })
  313. return
  314. }
  315. $.block.show();
  316. that.remoteCall({
  317. method: 'resumeAnalysisAgain',
  318. param: {
  319. taskId: lastTaskId
  320. },
  321. success: function(res) {
  322. $.block.hide();
  323. $('.analysis-progress,.modal-header .min').show();
  324. initCntroller.getAnalysisProgress();
  325. analysisModal.analysisTab($('.analysis-todo'));
  326. $('#startAnalyze, #clearResumeList').attr('disabled', 'true').addClass('disabled');
  327. $('.upload-btn').attr('disabled', 'true').addClass('disabled').css('z-index', '200');
  328. }
  329. })
  330. },
  331. checkResult: function(dom) {
  332. var id = $(dom).attr('id');
  333. $('.some-resume').removeClass('some-resume-result');
  334. $('.result').hide();
  335. $('.continueAnalyze').css({
  336. 'visibility':'hidden',
  337. 'z-index': '1'
  338. });
  339. // $('#resume_upload').css('left','0px');
  340. $('.upload-btn').css('visibility','visible');
  341. if(id === 'check_succeeded') {
  342. analysisModal.analysisTab($('.analysis-success'));
  343. } else {
  344. analysisModal.analysisTab($('.analysis-failure'));
  345. }
  346. if(lastTaskId !=null && lastTaskId !="") {//确认智能导入结果最近导入任务不为空
  347. analysisModal.lastAffirmChange();
  348. }
  349. },
  350. close: function() {
  351. $('#resumeInput-modal').modal('hide');
  352. jQuery("#grid").trigger("reloadGrid");//重新加载表格內的数据
  353. },
  354. minimize: function() {
  355. isDialogShow = false;
  356. if(lastTaskId){
  357. $('.minimize-analysis').hide();
  358. }else{
  359. $('.minimize-analysis').show();
  360. }
  361. },
  362. setProgressNum: function(data) {
  363. $('.doneAmount').text(data.doneAmount);
  364. $('.resumeAmount').text(data.resumeAmount);
  365. $('.failedAmount').text(data.failedAmount);
  366. $('.successedAmount').text(data.successedAmount);
  367. $('.todoAmount').text(data.nonExecuteAmount);
  368. if(pageUIPK == 'com.kingdee.shr.recuritment.app.ResumeBaseRec.selfUploadDemand.list'){
  369. $('.result-des-extra').text('解析成功后,将为您通知对应招聘职位的负责HR!');
  370. }else if(pageUIPK == 'com.kingdee.shr.recuritment.app.ResumeBaseRec.selfUploadEnterPriseArchives.list'){
  371. $('.result-des-extra').text('简历解析成功进入简历库后,有对应权限的人员可查看并使用该简历!');
  372. }
  373. },
  374. lastAffirmChange: function(){
  375. that.remoteCall({
  376. method: 'affirmSmartImportTaskResult',
  377. param: {
  378. taskId: lastTaskId
  379. },
  380. success: function(res) {
  381. console.log(res);
  382. }
  383. })
  384. }
  385. };
  386. // 最小化进度球
  387. var minimizeBall = {
  388. show: false,
  389. toggleExpansion: function() {
  390. $('.expansion').toggle();
  391. },
  392. maximize: function() {
  393. $('#resumeInput-modal').modal('show');
  394. $('.minimize-analysis').hide();
  395. }
  396. }
  397. // 初始化
  398. var initCntroller = {
  399. getSmartImportTaskSchedule: function(data) {
  400. if(data){
  401. lastTaskId = data.lastTaskId;
  402. lastAffirm = data.lastAffirm;
  403. taskId = data.id;
  404. analyzeTodoList = data.nonExecuteDetails;
  405. analyzeSucceedList = data.successDetails;
  406. analyzeFailList = data.failDetails;
  407. }else{
  408. $('#_resumeAnalysisDiv,#_resumeAnalysisDiv2,#_resumeAnalysisDiv3,#_resumeAnalysisDiv4,.shrTooltip, #viewLog').show(); //如果没有数据时,F7和查看日志按钮显示
  409. }
  410. analysisModal.compileResumeList('inputcontainer', { resumes: analyzeTodoList.reverse() });
  411. analysisModal.compileResumeList('resume-list-success', { resumes: analyzeSucceedList });
  412. analysisModal.compileResumeList('resume-list-failure', { resumes: analyzeFailList });
  413. if(data){
  414. analysisModal.setProgressNum(data);
  415. }
  416. if(!data || data.taskState === NOT_START){
  417. clearInterval(analysisProgressTimer);
  418. return;
  419. }
  420. //待解析大于0
  421. if(analyzeTodoList.length > 0){
  422. $('#startAnalyze, #clearResumeList').removeAttr('disabled').removeClass('disabled');
  423. $('.upload-btn').removeAttr('disabled').removeClass('disabled').css('z-index', '1');
  424. }
  425. //解析过程中初始化进度
  426. if(data && data.taskState && (data.taskState.value === SUBMITED || data.taskState.value === EXECUTING)){
  427. //控制带解析页面按钮不可使用
  428. $('#startAnalyze, #clearResumeList').attr('disabled', 'true').addClass('disabled');
  429. $('.upload-btn').attr('disabled', 'true').addClass('disabled').css('z-index', '200');
  430. //显示进度条
  431. $('.progress-done').css('width', data.doneAmount / data.resumeAmount * 100 + '%');
  432. $('.analysis-result').text('解析中...');
  433. $('.min-todo').show();
  434. //显示进度球
  435. if(!isDialogShow){
  436. $('.minimize-analysis').show();
  437. }
  438. }
  439. //解析完成
  440. if(data.lastTaskState){
  441. clearInterval(analysisProgressTimer);
  442. //进度条隐藏
  443. $('.analysis-progress,.modal-header .min').hide();
  444. //按钮控制
  445. $('#startAnalyze, #clearResumeList').removeAttr('disabled').removeClass('disabled');
  446. $('.upload-btn').removeAttr('disabled').removeClass('disabled').css('z-index', '1');
  447. //显示结果页面
  448. $('.some-resume').addClass('some-resume-result');
  449. $('.result').show();
  450. $('.analysis-result').text('解析完成');
  451. $('.min-todo').hide();
  452. analysisModal.analysisTab($('.analysis-todo'));
  453. if(analyzeSucceedList.length !== 0) {
  454. $('.analysis-success-ct .button-wrapper').css('visibility', 'visible');
  455. }
  456. if(analyzeFailList.length !== 0) {
  457. $('.analysis-failure-ct .button-wrapper').css('visibility', 'visible');
  458. }
  459. if(data.resumeAmount === data.successedAmount) {
  460. $('.all-success').show();
  461. $('.some-failed').hide();
  462. $('.analysis-success-ct .button-wrapper').css('visibility', 'visible');
  463. } else {
  464. $('.some-failed').show();
  465. $('.all-success').hide();
  466. $('.analysis-failure-ct .button-wrapper').css('visibility', 'visible');
  467. }
  468. $('.analysis-progress,.modal-header .min').hide();
  469. $('#_resumeAnalysisDiv,#_resumeAnalysisDiv2,#_resumeAnalysisDiv3,#_resumeAnalysisDiv4,.upload-resume-wrapper .shrTooltip, #viewLog').hide();
  470. $('.continueAnalyze').css({
  471. 'visibility':'visible',
  472. 'z-index': '205'
  473. });
  474. // $('#resume_upload').css('left','1000px');
  475. $('.upload-btn').css('visibility','hidden');
  476. //二开字段隐藏
  477. $('#_resumeAnalysisDiv5,#_resumeAnalysisDiv6').hide();
  478. $("#recuritmentDemand").shrPromptBox("enable");
  479. $("#interRecommendation").shrPromptBox("enable");
  480. $("#resumeSource").shrPromptBox("enable");
  481. $("#sourceType").shrSelect("enable");
  482. }
  483. if(lastAffirm){
  484. $('.minimize-analysis').hide();
  485. $('.some-resume').removeClass('some-resume-result');
  486. $('.result').hide();
  487. // $('#resume_upload').css('left','0px');
  488. $('.upload-btn').css('visibility','visible');
  489. $('#_resumeAnalysisDiv,#_resumeAnalysisDiv2,#_resumeAnalysisDiv3,#_resumeAnalysisDiv4,.shrTooltip, #viewLog').show();
  490. $('#_resumeAnalysisDiv5,#_resumeAnalysisDiv6').show();
  491. }
  492. },
  493. getAnalysisProgress: function() {
  494. that.remoteCall({
  495. method: 'getSmartImportTaskSchedule',
  496. param: {
  497. taskId: taskId
  498. },
  499. success: function(res) {
  500. var data = res.data
  501. if (res.code !== '0') {
  502. return false;
  503. }
  504. if(data.successDetails.length > 0){
  505. let okDetails = data.successDetails;
  506. let taskIds = new Array();
  507. //循环okDetails,并取出id
  508. for(let i=0;i<okDetails.length;i++){
  509. taskIds.push(okDetails[i].id);
  510. }
  511. that.remoteCall({
  512. method: 'afterSmartImportTask',
  513. param: {
  514. taskIds: taskIds.toString()
  515. },
  516. });
  517. }
  518. initCntroller.getSmartImportTaskSchedule(data);
  519. }
  520. })
  521. clearInterval(analysisProgressTimer);
  522. analysisProgressTimer = setInterval(function () {
  523. that.remoteCall({
  524. method: 'getSmartImportTaskSchedule',
  525. param: {
  526. // taskId: taskId
  527. },
  528. success: function(res) {
  529. var data = res.data
  530. if (res.code !== '0') {
  531. return false;
  532. }
  533. isEnd = data.isEnd;
  534. if(!res.data.taskState){
  535. res.data.taskState = [];
  536. res.data.taskState.value = NOT_START;
  537. }
  538. if(data.successDetails.length > 0){
  539. let okDetails = data.successDetails;
  540. let taskIds = new Array();
  541. //循环okDetails,并取出id
  542. for(let i=0;i<okDetails.length;i++){
  543. taskIds.push(okDetails[i].id);
  544. }
  545. that.remoteCall({
  546. method: 'afterSmartImportTask',
  547. param: {
  548. taskIds: taskIds.toString()
  549. },
  550. });
  551. }
  552. initCntroller.getSmartImportTaskSchedule(data);
  553. }
  554. })
  555. }, 3000);
  556. },
  557. initFileUpload: function() {
  558. pageUIPK = shr.getUrlRequestParam("uipk");
  559. var uploadUrl = shr.getContextPath() + "/dynamic.do?uipk=" + pageUIPK + "&method=uploadResume";
  560. $('#resume_upload').fileupload({
  561. url:uploadUrl,
  562. autoUpload:true,
  563. recalculateProgress:false,
  564. add: function(e,data) {
  565. console.log(data)
  566. var maxNumberOfFiles = 100;
  567. //DOC,DOCX,TXT,PDF,MSG,WPS,JPG,PNG,GIF,RTF
  568. var acceptFileTypes = /(\.|\/)(doc|docx|txt|pdf|msg|wps|jpg|png|gif|rtf)$/i;
  569. var maxSize = 1024 * 20 * 1024
  570. var todoAmount = parseInt($('.analysis-todo .todoAmount').text());
  571. var flag = true;
  572. if(!acceptFileTypes.test(data.files[0].name)) {
  573. shr.showWarning({
  574. message:'您上传的文件类型['+data.files[0].name+']不符合安全要求,系统不允许上传,请您上传常用office类、图片等文件',
  575. hideAfter:5
  576. });
  577. flag = false;
  578. }
  579. if(maxNumberOfFiles <= todoAmount) {
  580. shr.showWarning({
  581. message:'一次解析数量不能超过' + maxNumberOfFiles + '份',
  582. hideAfter:3
  583. });
  584. return false;
  585. }
  586. if(maxSize <= data.files[0].size) {
  587. shr.showWarning({
  588. message:data.files[0].name + ' 文件超过20M',
  589. hideAfter:3
  590. });
  591. flag = false;
  592. }
  593. if(data.files[0].size==0){
  594. shr.showWarning({
  595. message:'文件内容不能为空 ',
  596. hideAfter:3
  597. });
  598. return false;
  599. }
  600. if(flag){
  601. $('#startAnalyze, #clearResumeList').removeAttr('disabled').removeClass('disabled');
  602. $('.todoAmount').text(todoAmount + 1);
  603. $('.resumeAmount').text(data.files.length);
  604. var targetIdVal = '';
  605. if(!$('#_resumeAnalysisDiv').is(':hidden')){
  606. var val = $("#recuritmentDemand").shrPromptBox("getValue");
  607. if(val){
  608. targetIdVal = '&targetId=' + encodeURIComponent(val.id);
  609. }
  610. }
  611. var uploadUrl = shr.getContextPath() + "/dynamic.do?uipk=" + pageUIPK + "&method=uploadResume" + targetIdVal;
  612. $(this).fileupload('option', 'url', uploadUrl);
  613. $.block.show( {
  614. text : '操作中,请稍候...'
  615. });
  616. data.submit();
  617. }
  618. },
  619. start: function(e) {
  620. console.log('start');
  621. },
  622. progress: function(e, data) {
  623. console.log('progress')
  624. },
  625. progressall: function(e, data) {
  626. console.log('progressall')
  627. console.log(data);
  628. },
  629. done: function(e,data) {
  630. $('.analysis-todo-ct .resume-list').on('mouseover',function () {
  631. if($('#startAnalyze').hasClass('disabled')) {
  632. return
  633. }
  634. $(this).find('.cancel').show();
  635. $(this).css('border-color','#55B5EC');
  636. })
  637. $('.analysis-todo-ct .resume-list').on('mouseleave',function() {
  638. $(this).find('.cancel').hide();
  639. $(this).css('border-color','#E5E5E5');
  640. })
  641. var res = data.result;
  642. if(res.code == '0'){
  643. var data = res.data;
  644. taskId = data.id;
  645. analyzeTodoList.unshift(data.nonExecuteDetails[0]);
  646. analysisModal.compileResumeList('inputcontainer', { resumes: analyzeTodoList });
  647. }else{
  648. shr.showWarning({
  649. message: res.mesg,
  650. hideAfter: 3
  651. })
  652. $.block.hide();
  653. $('.todoAmount').text(parseInt($('.analysis-todo .todoAmount').text()) - 1);
  654. return;
  655. }
  656. if(parseFloat($('.analysis-todo .todoAmount').text()) == analyzeTodoList.length){
  657. $.block.hide();
  658. }
  659. }
  660. });
  661. },
  662. createResumeAnalysisTask: function (cb) {
  663. var _this = this
  664. that.remoteCall({
  665. method: 'createResumeAnalysisTask',
  666. param: {},
  667. success: function(res) {
  668. if (res.code === '0') {
  669. taskId = res.data.id;
  670. cb()
  671. } else {
  672. cb()
  673. }
  674. }
  675. })
  676. },
  677. initPage: function() {
  678. var _this = this
  679. _this.initSourceTypeSelect();
  680. $('#resumeInput-modal').draggable();
  681. // $('#resumeInput-modal').modal({backdrop:"static"}); //单击背景弹框不关闭,但弹框会默认打开,所以要写在弹框打开之前的位置
  682. _this.getAnalysisProgress();
  683. },
  684. initSourceTypeSelect: function(){
  685. if($('#sourceType').attr('ctrlrole')) return false;
  686. var opts = [{
  687. alias: "主动搜索",
  688. value: "1",
  689. },{
  690. alias: "主动投递",
  691. value: "2",
  692. },{
  693. alias: "推荐/竞聘",
  694. value: "3",
  695. }]
  696. $('#sourceType').shrSelect({
  697. 'id': 'sourceType',
  698. 'data':opts, //选项
  699. 'value': '', //默认选中项
  700. 'onChange':function(){
  701. //设置来源类型
  702. shr.remoteCall({
  703. method: 'setSmartImportChooseSourceType',
  704. param: {
  705. targetId: $("#sourceType").shrSelect('getValue').value
  706. },
  707. success: function(res) {
  708. console.log(res);
  709. }
  710. })
  711. }
  712. })
  713. $('#sourceType').bind("keyup.shrSelect", function( event ) {
  714. if(event.keyCode == 8 || event.keyCode == 46) {
  715. $('#sourceType').trigger('change');
  716. }
  717. })
  718. },
  719. addEventListener: function() {
  720. // 关闭简历解析对话框
  721. $('#closeAnalyze, #closeAnalyzeDialog').die('click').live('click',analysisModal.close);
  722. // 最小化
  723. $('.min').die('click').live('click',analysisModal.minimize);
  724. // 解析状态切换
  725. $('.analysis-tab button').die('click').live('click', function() {
  726. analysisModal.analysisTab(this);
  727. } );
  728. // 清空待解析简历
  729. $('#clearResumeList').die('click').live('click',analysisModal.clearTodo);
  730. // 开始解析
  731. $('#startAnalyze').die('click').live('click',function() {
  732. analysisModal.startAnalyze();
  733. });
  734. // 查看解析结果
  735. $('.check-result').die('click').live('click',function() {
  736. analysisModal.checkResult(this);
  737. });
  738. // 继续添加,解析简历
  739. $('.continueAnalyze').die('click').live('click',function() {
  740. $('.continueAnalyze').css({
  741. 'visibility':'hidden',
  742. 'z-index': '1'
  743. });
  744. // $('#resume_upload').css('left','0px');
  745. $('.upload-btn').css('visibility','visible');
  746. $('#_resumeAnalysisDiv,#_resumeAnalysisDiv2,#_resumeAnalysisDiv3,#_resumeAnalysisDiv4,,#_resumeAnalysisDiv5,#_resumeAnalysisDiv6,.upload-resume-wrapper .shrTooltip, #viewLog').show();
  747. $('.result').hide();
  748. $('.some-resume').removeClass('some-resume-result');
  749. $('.analysis-progress,.modal-header .min').hide();
  750. if(lastTaskId !=null && lastTaskId !="") {//确认智能导入结果最近导入任务不为空
  751. analysisModal.lastAffirmChange();
  752. }
  753. // $('#resume_upload').click();//根据最新需求,继续添加只切换页签,不上传简历
  754. });
  755. // 清空失败简历
  756. $('#clearFailedResume').die('click').live('click',analysisModal.clearFailed);
  757. // 重新解析
  758. $('#restartUpload').die('click').live('click',analysisModal.restartAnalyze);
  759. // 关闭
  760. // $('#resumeInput-modal').on('hidden.bs.modal', analysisModal.init);
  761. // 最大化
  762. $('#resumeInput-modal').die('click').live('show.bs.modal',function(){
  763. isDialogShow = true;
  764. $('#resumeInput-modal').removeClass('hide');
  765. $('.minimize-analysis').hide();
  766. });
  767. // 最小化状态下展示进度详情
  768. $('.progress-ball').die('click').live('click',minimizeBall.toggleExpansion);
  769. // 最小化时点击最大化按钮
  770. $('.maximize-icon').on('click',minimizeBall.maximize);
  771. // 单条删除简历
  772. $('.cancel').die('click').live('click',analysisModal.deleteResume);
  773. $('#viewLog').die('click').live('click',function(){
  774. var uipk = '';
  775. if(pageUIPK == 'com.kingdee.shr.recuritment.resumeScreening'){
  776. uipk = 'com.kingdee.shr.recuritment.app.SmartImportTask.resume.list';
  777. }else if(pageUIPK == 'com.kingdee.shr.recuritment.talentPool'){
  778. uipk = 'com.kingdee.shr.recuritment.app.SmartImportTask.archives.list';
  779. }else if(pageUIPK == 'com.kingdee.shr.recuritment.app.RecommendRecord.list'){
  780. uipk = 'com.kingdee.shr.recuritment.app.SmartImportTask.recommendResume.list';
  781. }else if(pageUIPK == 'com.kingdee.shr.recuritment.app.ResumeBaseRec.selfUploadDemand.list'){
  782. uipk = 'com.kingdee.shr.recuritment.app.ResumeBaseRec.selfUploadResume.list';
  783. }else if(pageUIPK == 'com.kingdee.shr.recuritment.app.ResumeBaseRec.selfUploadEnterPriseArchives.list'){
  784. uipk = 'com.kingdee.shr.recuritment.app.ResumeBaseRec.selfUploadEnterPrise.list';
  785. }
  786. var params ={
  787. uipk: uipk
  788. };
  789. var url = shr.getContextPath() + shr.dynamicURL + '?' + $.param(params)+ "&inFrame=true";
  790. window.open(url,'_blank');
  791. });
  792. }
  793. }
  794. return {
  795. init: function() {
  796. initCntroller.initFileUpload();
  797. initCntroller.initPage();
  798. initCntroller.addEventListener();
  799. }
  800. }
  801. }