TraceTimeLine.vue 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. <!--
  2. 作者:yangzhijie1488@163.com
  3. 时间:2017-12-12
  4. 描述:追踪单时间节点
  5. -->
  6. <template>
  7. <div>
  8. <div>
  9. <div class="page-header">
  10. <h4>时间节点({{ number }}/{{ count }})({{ trace.projectTaskName }})</h4>
  11. </div>
  12. </div>
  13. <div
  14. v-if="timeLines != undefined && timeLines[0].id != undefined"
  15. class="panel panel-default"
  16. >
  17. <div class="panel-body">
  18. <div
  19. v-for="item in timeLines"
  20. :key="item.id"
  21. class="after-selection--columns"
  22. style="margin-top: 5px; cursor: pointer"
  23. >
  24. <span>
  25. <Checkbox
  26. :id="'trace-finish-' + item.id"
  27. v-model:value="item.finished"
  28. class-name="terms"
  29. class="trace-checkbox"
  30. @update:value="openCloseTraceTimeLine(item)"
  31. />
  32. </span>
  33. <span class="big-icon trace-summary" @click="editTraceTimeLine(item)">
  34. {{ item.content == undefined ? "请填写" : item.content }}
  35. </span>
  36. <span class="trace-summary" @click="editTraceTimeLine(item)">
  37. <span
  38. class="label"
  39. :class="{
  40. 'label-danger': item.overdue == true,
  41. 'label-primary': item.overdue != true,
  42. }"
  43. >
  44. {{ item.userName == undefined ? "" : item.userName }}
  45. &nbsp;
  46. {{ formatDate(item.endDate) }}
  47. </span>
  48. </span>
  49. </div>
  50. </div>
  51. </div>
  52. <button
  53. v-if="trace.finished != true"
  54. type="button"
  55. style="width: 100%"
  56. class="btn btn-default"
  57. aria-label="Left Align"
  58. @click="createTraceTimeLine"
  59. >
  60. <span class="glyphicon glyphicon-plus" aria-hidden="true" />添加时间节点
  61. </button>
  62. <Loading v-if="loading" />
  63. </div>
  64. </template>
  65. <script>
  66. var Uuid = require('pc-component-v3').default.Uuid;
  67. var Common = require('../common/Common.js');
  68. import TraceCommon from './TraceCommon.js';
  69. var Loading = require('pc-component-v3').default.Loading;
  70. import MyProgress from '../widget/MyProgress.vue';
  71. var Checkbox = require('pc-component-v3').default.Checkbox;
  72. export default {
  73. components: {
  74. MyProgress,
  75. Checkbox,
  76. Loading,
  77. },
  78. // props: ['traceId', 'trace'],
  79. props: {
  80. traceId: {
  81. type: String,
  82. default: null,
  83. },
  84. trace: {
  85. type: Object,
  86. default: function() {
  87. return null;
  88. },
  89. },
  90. },
  91. data: function () {
  92. return {
  93. uuid: Uuid.createUUID(),
  94. timeLines: [
  95. {
  96. id: undefined,
  97. traceId: undefined,
  98. userId: undefined,
  99. userName: undefined,
  100. content: undefined,
  101. endDate: undefined,
  102. },
  103. ],
  104. count: 0,
  105. number: 0,
  106. progress: 0,
  107. timeLine: {
  108. traceId: undefined,
  109. userId: undefined,
  110. userName: undefined,
  111. content: undefined,
  112. endDate: undefined,
  113. },
  114. formatDate: TraceCommon.formatDate,
  115. loading: false,
  116. };
  117. },
  118. watch: {
  119. traceId: function (curVal, oldVal) {
  120. if (curVal != undefined) {
  121. this.refresh();
  122. }
  123. },
  124. },
  125. mounted: function () {
  126. console.log(this.trace);
  127. if (this.traceId != undefined) {
  128. this.refresh();
  129. this.timeLine.traceId = this.traceId;
  130. }
  131. },
  132. methods: {
  133. /**
  134. * 根据追踪单Id查询追踪时间节点数据
  135. * @author GuoZhiBo 20171201
  136. */
  137. getTimeLine: function () {
  138. var _self = this;
  139. $.ajax({
  140. url: Common.getApiURL('TraceTimeLineResource/listByTraceId'),
  141. type: 'get',
  142. dataType: 'json',
  143. async: false,
  144. data: {
  145. traceId: _self.traceId,
  146. },
  147. beforeSend: function (request) {
  148. Common.addTokenToRequest(request);
  149. },
  150. success: function (data) {
  151. _self.timeLines = data;
  152. _self.addEmtpyTraceTimeLine();
  153. },
  154. error: function (XMLHttpRequest, textStatus, errorThrown) {
  155. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  156. },
  157. });
  158. },
  159. /**
  160. * 根据追踪单ID查询时间节点总数量
  161. * @author GuoZhiBo 20171201
  162. */
  163. getTimeLineCount: function () {
  164. var _self = this;
  165. $.ajax({
  166. url: Common.getApiURL('TraceTimeLineResource/queryTraceTimeLineCount'),
  167. type: 'get',
  168. dataType: 'json',
  169. async: false,
  170. data: {
  171. traceId: _self.traceId,
  172. },
  173. beforeSend: function (request) {
  174. Common.addTokenToRequest(request);
  175. },
  176. success: function (data) {
  177. _self.count = data;
  178. _self.progresss();
  179. },
  180. error: function (XMLHttpRequest, textStatus, errorThrown) {
  181. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  182. },
  183. });
  184. },
  185. /**
  186. * 根据追踪单Id查询时间节点的完成数量
  187. * @author GuoZhiBo 20171201
  188. */
  189. getTimeLineNumber: function () {
  190. var _self = this;
  191. $.ajax({
  192. url: Common.getApiURL('TraceTimeLineResource/queryTraceTimeLineNumber'),
  193. type: 'get',
  194. dataType: 'json',
  195. async: false,
  196. data: {
  197. traceId: _self.traceId,
  198. },
  199. beforeSend: function (request) {
  200. Common.addTokenToRequest(request);
  201. },
  202. success: function (data) {
  203. _self.number = data;
  204. _self.progresss();
  205. },
  206. error: function (XMLHttpRequest, textStatus, errorThrown) {
  207. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  208. },
  209. });
  210. },
  211. /**
  212. * 计算progress
  213. * @author GuoZhiBo 20171201
  214. */
  215. progresss: function () {
  216. var _self = this;
  217. if (_self.number == 0 || _self.count == 0) {
  218. _self.progress = 0;
  219. } else {
  220. _self.progress = (_self.number / _self.count).toFixed(2) * 100;
  221. }
  222. },
  223. /**
  224. * 添加空的时间节点
  225. */
  226. addEmtpyTraceTimeLine: function () {
  227. var _self = this;
  228. if (_self.timeLines == undefined) {
  229. _self.timeLines = [];
  230. }
  231. for (var i = _self.timeLines.length; i < 1; i++) {
  232. var emtpyTraceTimeLine = {
  233. id: undefined,
  234. traceId: _self.traceId,
  235. userId: undefined,
  236. userName: undefined,
  237. content: undefined,
  238. endDate: undefined,
  239. };
  240. _self.timeLines.push(emtpyTraceTimeLine);
  241. }
  242. },
  243. /**
  244. * 编辑时间节点
  245. * @param {Object} traceTimeLine
  246. */
  247. editTraceTimeLine: function (traceTimeLine) {
  248. var _self = this;
  249. this.$router.push({
  250. path: '/trace/traceTimeLineEdit/' + traceTimeLine.id,
  251. query: {
  252. projectId: _self.trace.projectId,
  253. },
  254. });
  255. },
  256. /**
  257. * 创建时间节点
  258. */
  259. createTraceTimeLine: function () {
  260. var _self = this;
  261. this.$router.push({
  262. path: '/trace/traceTimeLineCreate/' + this.trace.id,
  263. query: {
  264. projectId: _self.trace.projectId,
  265. },
  266. });
  267. },
  268. /**
  269. * 打开或关闭时间节点
  270. * @param {Object} traceTimeLine
  271. */
  272. openCloseTraceTimeLine: function (traceTimeLine) {
  273. console.log(traceTimeLine);
  274. // traceTimeLine.finished = !traceTimeLine.finished;
  275. var _self = this;
  276. console.log(_self.trace);
  277. if (_self.trace.finished != true) {
  278. _self.loading=true;
  279. $.ajax({
  280. url: Common.getApiURL(
  281. 'TraceTimeLineResource/updateTraceTimeLineFinished',
  282. ),
  283. type: 'post',
  284. contentType: 'application/json',
  285. data: JSON.stringify(traceTimeLine),
  286. beforeSend: function (request) {
  287. Common.addTokenToRequest(request);
  288. },
  289. success: function (data) {
  290. _self.loading=false;
  291. _self.refresh();
  292. _self.$emit('refreshTraceLog');
  293. },
  294. error: function (XMLHttpRequest, textStatus, errorThrown) {
  295. _self.loading=false;
  296. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  297. },
  298. });
  299. } else {
  300. Notify.error('提示', '已完成的订单不能修改!');
  301. }
  302. },
  303. /**
  304. * 刷新界面
  305. */
  306. refresh: function () {
  307. this.getTimeLine();
  308. this.getTimeLineCount();
  309. this.getTimeLineNumber();
  310. },
  311. },
  312. };
  313. </script>
  314. <style scoped>
  315. .mui-checkbox-self {
  316. left: 0px !important;
  317. top: 0px !important;
  318. }
  319. .font-color {
  320. color: red;
  321. }
  322. .big-icon {
  323. font-size: large;
  324. }
  325. .trace-summary {
  326. font-size: large;
  327. margin-left: 5px;
  328. margin-right: 5px;
  329. }
  330. .trace-checkbox {
  331. display: inline;
  332. font-size: large;
  333. }
  334. </style>