jdjh.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668
  1. /**
  2. * 存储阶段进度时间段的对象
  3. */
  4. var stageProgress = {
  5. // // 方案 实际时间段
  6. // fangAnTimeBucket: ['2017-01-01', '2017-03-01'],
  7. // // 纲要 实际时间段
  8. // gangYaoTimeBucket: ['2017-02-26', '2017-08-29'],
  9. // // 成果 实际时间段
  10. // chengGuoTimeBucket: ['2017-08-29', '2017-12-06'],
  11. // // 计划开始时间
  12. // scheduledStartTime: '2016-12-22',
  13. // // 有效截止日期
  14. // validTime: '2017-05-10'
  15. // // 方案 实际时间段
  16. // fangAnTimeBucket: ['2017-01-01', '2017-01-20'],
  17. // // 纲要 实际时间段
  18. // gangYaoTimeBucket: ['2017-02-07', '2017-02-28'],
  19. // // 成果 实际时间段
  20. // chengGuoTimeBucket: ['2017-02-15', '2017-03-20'],
  21. // // 计划开始时间
  22. // scheduledStartTime: '2017-01-01',
  23. // // 有效截止日期
  24. // validTime: '2017-02-20'
  25. // // 方案 实际时间段
  26. // fangAnTimeBucket: ['2017-11-23', '2017-11-30'],
  27. // // 方案 计划时间段
  28. // fangAnPlanTimeBucket: ['2017-11-20', '2017-11-26'],
  29. //
  30. // // 纲要 实际时间段
  31. // gangYaoTimeBucket: ['2017-11-25', '2017-12-03'],
  32. // // 纲要 计划时间段
  33. // gangYaoPlanTimeBucket: ['2017-11-25', '2017-12-03'],
  34. //
  35. // // 成果 实际时间段
  36. // chengGuoTimeBucket: ['2017-12-06', '2017-12-12'],
  37. // // 成果 计划时间段
  38. // chengGuoPlanTimeBucket: ['2017-12-07', '2017-12-14']
  39. // 方案 实际时间段
  40. fangAnTimeBucket: ['2019-02-04', '2019-02-27'],
  41. // 方案 计划时间段
  42. fangAnPlanTimeBucket: ['2019-02-05', '2019-02-26'],
  43. // 纲要 实际时间段
  44. gangYaoTimeBucket: ['-', '-'],
  45. // 纲要 计划时间段
  46. gangYaoPlanTimeBucket: ['2019-02-27', '2019-03-07'],
  47. // 成果 实际时间段
  48. chengGuoTimeBucket: ['-', '-'],
  49. // 成果 计划时间段
  50. chengGuoPlanTimeBucket: ['2019-03-08', '2019-04-17']
  51. // // 计划开始时间
  52. // scheduledStartTime: '2017-11-23',
  53. // // 有效截止日期
  54. // validTime: '2017-11-30 '
  55. };
  56. /**
  57. * 横坐标轴时间刻度可选值
  58. * 这里 month和year 没有考虑平闰年之分
  59. */
  60. var timeInterval = {
  61. day: 3600 * 1000 * 24,
  62. month: 3600 * 1000 * 24 * 31,
  63. year: 3600 * 1000 * 24 * 31 * 12,
  64. };
  65. /**
  66. * 时间坐标轴标签单位应该精确到哪一位
  67. */
  68. var xAxisLabelUnit = {
  69. year: false,
  70. month: false,
  71. day: false
  72. }
  73. /**
  74. * 获取合适的横坐标时间刻度间隔
  75. */
  76. function getProperTimeAxisInterval() {
  77. xAxisLabelUnit.year = false;
  78. xAxisLabelUnit.month = false;
  79. xAxisLabelUnit.day = false;
  80. var timeDataArray = getXAxisData();
  81. var begin = getTimeMilliseconds(timeDataArray[timeDataArray.length - 1]);
  82. console.log("begin " + begin);
  83. var periodMillis = getTimeMilliseconds(timeDataArray[timeDataArray.length - 1]) - getTimeMilliseconds(timeDataArray[0]);
  84. console.log("periodMillis " + periodMillis);
  85. var years = periodMillis / timeInterval.year;
  86. console.log("years " + years);
  87. var months = periodMillis / timeInterval.month;
  88. console.log("months " + months);
  89. var days = periodMillis / timeInterval.day;
  90. console.log("days " + days);
  91. if(months <= 3) {
  92. xAxisLabelUnit.day = true;
  93. return timeInterval.day * 5;
  94. } else if(months <= 16) {
  95. xAxisLabelUnit.month = true;
  96. return timeInterval.month;
  97. } else if(months <= 24) {
  98. xAxisLabelUnit.month = true;
  99. return timeInterval.month * 2;
  100. } else if(years <= 16) {
  101. xAxisLabelUnit.year = true;
  102. return timeInterval.year;
  103. }
  104. }
  105. /**
  106. * 获取横轴坐标数据源,这里横坐标只显示年月
  107. * 最小值取传入数据最小的时间再减小一个月
  108. * 最大值取传入数据最小的时间再增加一个月
  109. */
  110. function getXAxisData() {
  111. var arr = new Array();
  112. arr = arr
  113. // .concat(stageProgress.scheduledStartTime)
  114. .concat(stageProgress.fangAnTimeBucket)
  115. .concat(stageProgress.fangAnPlanTimeBucket)
  116. .concat(stageProgress.gangYaoTimeBucket)
  117. .concat(stageProgress.gangYaoPlanTimeBucket)
  118. .concat(stageProgress.chengGuoTimeBucket)
  119. .concat(stageProgress.chengGuoPlanTimeBucket)
  120. // .concat(stageProgress.validTime)
  121. .filter(function(item) {
  122. return item != "-";
  123. }).sort();
  124. console.log(arr);
  125. return arr;
  126. }
  127. /**
  128. * 更改日期字符串为相应月份的第一天
  129. * @param {Object} dateStr 日期字符串
  130. */
  131. function changeDateToMonthFirstDay(dateStr) {
  132. var inputDate = new Date(dateStr);
  133. inputDate.setDate(1);
  134. var result = inputDate.getFullYear() + "-" +
  135. (inputDate.getMonth() >= 9 ? inputDate.getMonth() + 1 : "0" +
  136. (inputDate.getMonth() + 1)) + "-" + ("0" + 1);
  137. return result;
  138. }
  139. /**
  140. * 获取格式化的日期 YYYY-MM-dd
  141. */
  142. function formatDateToStr(date) {
  143. var inputMonth = date.getMonth();
  144. var inputDate = date.getDate();
  145. var result = date.getFullYear() +
  146. "-" + (inputMonth >= 9 ? inputMonth + 1 : "0" + (inputMonth + 1)) +
  147. "-" + (inputDate >= 9 ? inputDate : "0" + (inputDate));
  148. return result;
  149. }
  150. var faOnTimeCompletionTime = getOnTimeCompletionTime('地基处理', stageProgress.fangAnTimeBucket[0], stageProgress.fangAnTimeBucket[
  151. 1], stageProgress.fangAnPlanTimeBucket[1]);
  152. var gyOnTimeCompletionTime = getOnTimeCompletionTime('桩检验', stageProgress.gangYaoTimeBucket[0], stageProgress.gangYaoTimeBucket[
  153. 1], stageProgress.gangYaoPlanTimeBucket[1]);
  154. var cgOnTimeCompletionTime = getOnTimeCompletionTime('综合楼基础', stageProgress.chengGuoTimeBucket[0], stageProgress.chengGuoTimeBucket[
  155. 1], stageProgress.chengGuoPlanTimeBucket[1]);
  156. var faOverTimeCompletionTime = getOverTimeCompletionTime('地基处理', stageProgress.fangAnTimeBucket[0], stageProgress.fangAnTimeBucket[
  157. 1], stageProgress.fangAnPlanTimeBucket[1]);
  158. var gyOverTimeCompletionTime = getOverTimeCompletionTime('桩检验', stageProgress.gangYaoTimeBucket[0], stageProgress.gangYaoTimeBucket[
  159. 1], stageProgress.gangYaoPlanTimeBucket[1]);
  160. var cgOverTimeCompletionTime = getOverTimeCompletionTime('综合楼基础', stageProgress.chengGuoTimeBucket[0], stageProgress.chengGuoTimeBucket[
  161. 1], stageProgress.chengGuoPlanTimeBucket[1]);
  162. /**
  163. * 时间数组
  164. */
  165. var timeArray = {
  166. // 实际开始时间
  167. beginTimeArr: [
  168. getTimeMilliseconds(stageProgress.fangAnTimeBucket[0]),
  169. getTimeMilliseconds(stageProgress.gangYaoTimeBucket[0]),
  170. getTimeMilliseconds(stageProgress.chengGuoTimeBucket[0]),
  171. ],
  172. // 按时完成时间
  173. onTimeCompletionTimeArr: [
  174. getTimeMilliseconds(faOnTimeCompletionTime),
  175. getTimeMilliseconds(gyOnTimeCompletionTime),
  176. getTimeMilliseconds(cgOnTimeCompletionTime),
  177. ],
  178. // 超时完成时间
  179. overTimeCompletionTimeArr: [
  180. getTimeMilliseconds(faOverTimeCompletionTime),
  181. getTimeMilliseconds(gyOverTimeCompletionTime),
  182. getTimeMilliseconds(cgOverTimeCompletionTime),
  183. ],
  184. // 计划开始时间
  185. planbeginTimeArr: [
  186. getTimeMilliseconds(stageProgress.fangAnPlanTimeBucket[0]),
  187. getTimeMilliseconds(stageProgress.gangYaoPlanTimeBucket[0]),
  188. getTimeMilliseconds(stageProgress.chengGuoPlanTimeBucket[0]),
  189. ],
  190. planCompletionTimeArr: [
  191. getTimeMilliseconds(stageProgress.fangAnPlanTimeBucket[1]),
  192. getTimeMilliseconds(stageProgress.gangYaoPlanTimeBucket[1]),
  193. getTimeMilliseconds(stageProgress.chengGuoPlanTimeBucket[1]),
  194. ],
  195. };
  196. // 构建图表配置项
  197. ptoption = {
  198. tooltip: {
  199. trigger: 'axis',
  200. axisPointer: {
  201. type: 'shadow',
  202. },
  203. /**
  204. * 也可以使用 formatter: '{b0}:<br />{a0}: {c0}<br />{a1}: {c1}<br />{a2}: {c2}',
  205. * 但是这样当鼠标指向纵坐标的三个阶段中的某一个时,即使该阶段 没有按时完成,或者 没有超时,
  206. * 也会显示 按时 或 超时 的 tooltip
  207. */
  208. formatter: function(params) {
  209. console.log("params" + JSON.stringify(params));
  210. // console.log("params[0]" + JSON.stringify(params[0]));
  211. // console.log("params[1]" + JSON.stringify(params[1]));
  212. // console.log("params[2]" + JSON.stringify(params[2]));
  213. var info = params[0].axisValue + ":<br />";
  214. info += params[0].seriesName + ":" + getSeriesDateStr(params[0].data) + "<br />";
  215. info += "结束时间:" + (params[2].data != "-" && params[2].data != undefined && params[2].data != null && !isNaN(params[2].data) ?
  216. getSeriesDateStr(params[2].data) :
  217. (!isNaN(params[1].data) && params[1].data != undefined && params[1].data != null ? getSeriesDateStr(params[1].data) : "-"))
  218. + "<br />";
  219. info+=params[3].seriesName+":"+getSeriesDateStr(params[3].data) + "<br />";
  220. info+="计划完成时间:"+getSeriesDateStr(params[4].data);
  221. return info;
  222. },
  223. },
  224. /**
  225. * 右上角工具栏
  226. */
  227. toolbox: {
  228. right: '3%',
  229. show: false,
  230. feature: {
  231. /**
  232. * 数据视图
  233. */
  234. // dataView:{
  235. // show:true,
  236. // },
  237. saveAsImage: {
  238. show: true
  239. }
  240. }
  241. },
  242. /**
  243. * 图例
  244. */
  245. legend: {
  246. data: ['按时完成', '超时完成', '计划完成'],
  247. tooltip: {
  248. show: true,
  249. },
  250. itemWidth: 15,
  251. itemHeight: 15,
  252. textStyle: {
  253. fontSize: 16,
  254. fontFamily: 'Microsoft YaHei',
  255. },
  256. itemGap: 80,
  257. padding: 10,
  258. textStyle:{
  259. color:"#5dc2fe"
  260. }
  261. },
  262. /**
  263. * 直角坐标系内绘图网格
  264. */
  265. grid: {
  266. left: '3%',
  267. right: '3%',
  268. bottom: '2%',
  269. /**
  270. * grid 区域是否包含坐标轴的刻度标签。
  271. */
  272. containLabel: true,
  273. },
  274. /**
  275. * 横坐标
  276. */
  277. xAxis: {
  278. // /**
  279. // * 坐标轴指示器
  280. // */
  281. // axisPointer: {
  282. // show: true,
  283. // },
  284. /**
  285. * 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,
  286. * 在刻度计算上也有所不同,例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。
  287. */
  288. type: 'time',
  289. /**
  290. * value 是一个包含 min 和 max 的对象,分别表示数据的最大最小值,这个函数应该返回坐标轴的最大值。
  291. *
  292. * 坐标轴刻度最小值。
  293. */
  294. min: function(value) {
  295. return value.min + (getTimeMilliseconds(getProperTimeAxisBeginAndEndTime()[0]) - value.min);
  296. },
  297. /**
  298. * value 是一个包含 min 和 max 的对象,分别表示数据的最大最小值,这个函数应该返回坐标轴的最大值。
  299. *
  300. * 坐标轴刻度最大值。
  301. */
  302. max: function(value) {
  303. return value.max + (getTimeMilliseconds(getProperTimeAxisBeginAndEndTime()[1]) - value.max);
  304. },
  305. //
  306. /**
  307. * 设置坐标轴分割间隔
  308. */
  309. interval: getProperTimeAxisInterval(),
  310. axisLine: {
  311. lineStyle: {
  312. color: '#5dc2fe',
  313. width: 1,
  314. },
  315. },
  316. /**
  317. * 坐标轴刻度标签的相关设置。
  318. */
  319. axisLabel: {
  320. showMinLabel: false,
  321. showMaxLabel: false,
  322. rotate: 35,
  323. margin: 12,
  324. fontSize: 12,
  325. color: '#5dc2fe',
  326. formatter: function(value, index) {
  327. var date = new Date(value);
  328. // var time = date.getFullYear() + "." + (date.getMonth() + 1) + "." + date.getDate();
  329. var time = date.getFullYear();
  330. if(xAxisLabelUnit.month) {
  331. time += "." + (date.getMonth() + 1);
  332. }
  333. if(xAxisLabelUnit.day) {
  334. time += "." + (date.getMonth() + 1) + '.' + date.getDate();
  335. }
  336. return time;
  337. },
  338. },
  339. /**
  340. * 坐标轴刻度分割线
  341. */
  342. splitLine: {
  343. show: false,
  344. }
  345. },
  346. /**
  347. * 纵坐标
  348. */
  349. yAxis: {
  350. type: 'category',
  351. data: ['地基处理', '桩检验', '综合楼基础'],
  352. axisTick: {
  353. show: false,
  354. },
  355. axisLine: {
  356. lineStyle: {
  357. color: '#5dc2fe',
  358. width: 1,
  359. },
  360. },
  361. axisLabel: {
  362. fontWeight: 'bold',
  363. fontSize: 12,
  364. color: '#5dc2fe',
  365. fontFamily: 'Microsoft YaHei',
  366. },
  367. splitLine: {
  368. show: true,
  369. lineStyle: {
  370. color: '#5dc2fe',
  371. width: 1,
  372. },
  373. }
  374. },
  375. /**
  376. * 系列
  377. */
  378. series: [{
  379. name: '开始时间',
  380. type: 'bar',
  381. stack: '时间',
  382. itemStyle: {
  383. normal: {
  384. barBorderColor: 'rgba(0,0,0,0)',
  385. color: 'rgba(0,0,0,0)'
  386. },
  387. emphasis: {
  388. barBorderColor: 'rgba(0,0,0,0)',
  389. color: 'rgba(0,0,0,0)'
  390. }
  391. },
  392. label: {
  393. normal: {
  394. formatter: function(params) {
  395. return getSeriesDateStr(params.value);
  396. },
  397. show: true,
  398. position: 'insideRight',
  399. fontSize: 10,
  400. color: '#5dc2fe',
  401. fontFamily: 'Microsoft YaHei',
  402. offset: [40, -15],
  403. }
  404. },
  405. data: timeArray.beginTimeArr,
  406. /**
  407. * 柱状图宽度
  408. */
  409. barWidth: 10,
  410. barCategoryGap:'50%',
  411. }, {
  412. name: '按时完成',
  413. type: 'bar',
  414. stack: '时间',
  415. itemStyle: {
  416. normal: {
  417. color: '#5dc2fe'
  418. }
  419. },
  420. label: {
  421. normal: {
  422. formatter: function(params) {
  423. return getSeriesDateStr(params.value);
  424. },
  425. show: true,
  426. fontSize: 10,
  427. color: '#5dc2fe',
  428. position: 'right',
  429. fontFamily: 'Microsoft YaHei',
  430. offset: [-45, -15],
  431. }
  432. },
  433. data: timeArray.onTimeCompletionTimeArr,
  434. /**
  435. * 柱状图宽度
  436. */
  437. barWidth: 10,
  438. barCategoryGap:'50%',
  439. }, {
  440. name: '超时完成',
  441. type: 'bar',
  442. stack: '时间',
  443. itemStyle: {
  444. normal: {
  445. color: '#ff4747'
  446. }
  447. },
  448. label: {
  449. normal: {
  450. formatter: function(params) {
  451. return getSeriesDateStr(params.value);
  452. },
  453. show: true,
  454. fontSize: 10,
  455. color: '#ff4747',
  456. offset: [-5, -15],
  457. position: 'right',
  458. fontFamily: 'Microsoft YaHei',
  459. }
  460. },
  461. data: timeArray.overTimeCompletionTimeArr,
  462. /**
  463. * 柱状图宽度
  464. */
  465. barWidth: 10,
  466. barCategoryGap:'50%',
  467. },
  468. {
  469. name: '计划开始时间',
  470. type: 'bar',
  471. stack: '计划',
  472. itemStyle: {
  473. normal: {
  474. barBorderColor: 'rgba(0,0,0,0)',
  475. color: 'rgba(0,0,0,0)'
  476. },
  477. emphasis: {
  478. barBorderColor: 'rgba(0,0,0,0)',
  479. color: 'rgba(0,0,0,0)'
  480. }
  481. },
  482. label: {
  483. normal: {
  484. formatter: function(params) {
  485. return getSeriesDateStr(params.value);
  486. },
  487. show: true,
  488. position: 'insideRight',
  489. fontSize: 10,
  490. color: '#5dc2fe',
  491. fontFamily: 'Microsoft YaHei',
  492. // offset: [40, -20],
  493. offset: [45, 18],
  494. }
  495. },
  496. data: timeArray.planbeginTimeArr,
  497. /**
  498. * 柱状图宽度
  499. */
  500. barWidth: 10,
  501. barCategoryGap:'50%',
  502. },
  503. {
  504. name: '计划完成',
  505. type: 'bar',
  506. stack: '计划',
  507. itemStyle: {
  508. normal: {
  509. color: '#FFA500'
  510. }
  511. },
  512. label: {
  513. normal: {
  514. formatter: function(params) {
  515. return getSeriesDateStr(params.value);
  516. },
  517. show: true,
  518. fontSize: 10,
  519. color: '#5dc2fe',
  520. // offset: [-45, -20],
  521. position: 'right',
  522. offset: [-45, 18],
  523. fontFamily: 'Microsoft YaHei',
  524. }
  525. },
  526. data: timeArray.planCompletionTimeArr,
  527. /**
  528. * 柱状图宽度
  529. */
  530. barWidth: 10,
  531. barCategoryGap:'50%',
  532. }
  533. ]
  534. };
  535. /**
  536. * 时间对象转日期字符串 yyyy.MM.dd
  537. * @param {Object} timeObject 毫秒值或时间字符串
  538. */
  539. function getSeriesDateStr(timeObject) {
  540. if(timeObject == "-") {
  541. return timeObject;
  542. }
  543. var date = new Date(timeObject);
  544. var dateStr = '';
  545. dateStr += date.getFullYear() + '.';
  546. dateStr += date.getMonth() + 1 + '.';
  547. dateStr += date.getDate();
  548. return dateStr;
  549. };
  550. /**
  551. * 获取阶段的计划内完成时间(蓝色柱状图值)
  552. * @param {Object} stage 阶段
  553. * @param {Object} stateBeginTime 阶段实际开始时间
  554. * @param {Object} stateCompletionTime 阶段实际完成时间
  555. * @param{Object} stagePlanCompletionTimeStr 阶段计划完成时间
  556. */
  557. function getOnTimeCompletionTime(stage, stageBeginTimeStr, stageCompletionTimeStr, stagePlanCompletionTimeStr) {
  558. // var validTimeMillis = getTimeMilliseconds(stageProgress.validTime);
  559. var validTimeMillis = getTimeMilliseconds(stagePlanCompletionTimeStr);
  560. var stageBeginTimeMillis = getTimeMilliseconds(stageBeginTimeStr);
  561. var stageCompletionTimeMillis = getTimeMilliseconds(stageCompletionTimeStr);
  562. if(validTimeMillis <= stageBeginTimeMillis) {
  563. // 若阶段开始时间大于等于有效期,则项目超时完成,有效时间为'-'
  564. return '-';
  565. }
  566. if(validTimeMillis > stageBeginTimeMillis && validTimeMillis < stageCompletionTimeMillis) {
  567. // 若有效期介于阶段完成时间和阶段开始时间之间,则该阶段按时完后时间(实际该阶段是超时完成的)即蓝色柱状图的终值为有效期
  568. return stagePlanCompletionTimeStr;
  569. }
  570. if(validTimeMillis >= stageCompletionTimeMillis) {
  571. // 若有效期大于等于阶段完成时间,则阶段按时完成
  572. return stageCompletionTimeStr;
  573. }
  574. }
  575. /**
  576. * 获取阶段内的超时完成时间(红色色柱状图值)
  577. * @param {Object} stage 阶段
  578. * @param {Object} stateBeginTime
  579. * @param {Object} stateCompletionTime
  580. * @param{Object} stagePlanCompletionTimeStr 阶段计划完成时间
  581. */
  582. function getOverTimeCompletionTime(stage, stageBeginTimeStr, stageCompletionTimeStr, stagePlanCompletionTimeStr) {
  583. // var validTimeMillis = getTimeMilliseconds(stageProgress.validTime);
  584. var validTimeMillis = getTimeMilliseconds(stagePlanCompletionTimeStr);
  585. var stageBeginTimeMillis = getTimeMilliseconds(stageBeginTimeStr);
  586. var stageCompletionTimeMillis = getTimeMilliseconds(stageCompletionTimeStr);
  587. if(validTimeMillis < stageCompletionTimeMillis) {
  588. // 阶段完成时间大于有效期,则将阶段完成时间作为超时时间返回
  589. return stageCompletionTimeStr;
  590. }
  591. if(validTimeMillis >= stageCompletionTimeMillis) {
  592. // 阶段完成时间小于等于有效期,则阶段按时完成,超时时间应为'-'
  593. return '-';
  594. }
  595. }
  596. /**
  597. * 根据时间字符串获取对应的毫秒值
  598. * @param {Object} timeStr 时间字符串
  599. */
  600. function getTimeMilliseconds(timeStr) {
  601. return(new Date(timeStr)).getTime();
  602. }
  603. /**
  604. *获取时间坐标轴的起始和结束值
  605. */
  606. function getProperTimeAxisBeginAndEndTime() {
  607. var xAxis = getXAxisData();
  608. var begin = xAxis[0];
  609. var end = xAxis[xAxis.length - 1];
  610. var beginDate = new Date(begin);
  611. var endDate = new Date(end);
  612. if(xAxisLabelUnit.month) {
  613. beginDate.setDate(1);
  614. endDate.setMonth(endDate.getMonth() + 1);
  615. endDate.setDate(1);
  616. } else {
  617. var daysCount = getProperTimeAxisInterval() / timeInterval.day;
  618. console.log("daysCount " + daysCount);
  619. beginDate.setDate(beginDate.getDate() - daysCount);
  620. endDate.setDate(endDate.getDate() + daysCount);
  621. }
  622. var beArr = [formatDateToStr(beginDate), formatDateToStr(endDate)];
  623. console.log("beArr " + beArr);
  624. return beArr;
  625. }