Schedule.vue 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <template>
  2. <el-row style="display: flex;flex-direction: row;align-items: center;margin-bottom: 10px;color: #333333">
  3. <h4>项目规划</h4>
  4. <el-tooltip class="item" effect="dark" :content="scheduleGuide" placement="right-end">
  5. <i class="el-icon-question"></i>
  6. </el-tooltip>
  7. </el-row>
  8. <Tree :data="requirements" @change="handleTreeChange" @nodeClick="handleNodeClick" ref="tree"></Tree>
  9. <RequirementDrawer
  10. ref="drawer"
  11. v-bind="requirementInDrawer"
  12. @change="handleDrawerContentChange"
  13. @requirement-update="getTreeData"
  14. ></RequirementDrawer>
  15. </template>
  16. <script>
  17. import Tree from '@/components/Tree.vue';
  18. import { RequirementAPI } from '@/api';
  19. import RequirementDrawer from '@/components/RequirementDrawer.vue';
  20. const scheduleGuide = '项目规划用于asdsadsadda';
  21. export default {
  22. name: 'Schedule',
  23. components: { RequirementDrawer, Tree },
  24. data() {
  25. return {
  26. scheduleGuide,
  27. requirements: [],
  28. showRequirementDrawer: false,
  29. addRequirementDrawer: false,
  30. parentOfAddingRequirement: null,
  31. requirementInDrawer: {},
  32. };
  33. },
  34. async mounted() {
  35. await this.getTreeData();
  36. },
  37. methods: {
  38. async getTreeData() {
  39. try {
  40. this.requirements = this.addChild2Node(await RequirementAPI.getTreeNodesByProjectId(this.$store.state.workspace.currentProjectId));
  41. } catch (e) {
  42. console.error(e);
  43. }
  44. },
  45. addChild2Node(array) {
  46. const nodeMap = new Map();
  47. array.forEach((item) => nodeMap.set(item.id, item));
  48. array.forEach((item) => {
  49. if (item.parent) {
  50. const tempParent = nodeMap.get(item.parent);
  51. if (!tempParent.childs) {
  52. tempParent.childs = [];
  53. }
  54. tempParent.childs.push(item);
  55. }
  56. });
  57. return array;
  58. },
  59. async handleTreeChange(msg) {
  60. const { type, id } = msg;
  61. await RequirementAPI[type](id);
  62. await this.getTreeData();
  63. },
  64. handleNodeClick(id) {
  65. this.$refs.drawer.show();
  66. this.requirementInDrawer = Array.prototype.find.call(this.requirements, (requirement) => requirement.id === id);
  67. },
  68. handleDrawerContentChange(id) {
  69. this.requirementInDrawer = Array.prototype.find.call(this.requirements, (requirement) => requirement.id === id);
  70. },
  71. },
  72. };
  73. </script>
  74. <style>
  75. </style>