欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue如何實現甘特圖

 更新時間:2024年12月28日 09:41:25   作者:程序員阿明  
文章主要內容是關于如何在項目中引入依賴項以及編寫組件代碼的步驟和總結,作者分享了個人經驗,旨在為讀者提供參考,并鼓勵大家支持腳本之家

vue實現甘特圖

1、引入依賴

npm install dhtmlx-gantt@6.3.7

2、組件代碼

<template>
  <div class="app-container">
    <div ref="gantt" class="left-container" />
  </div>
</template>
<script>
  import gantt from 'dhtmlx-gantt' // 引入模塊
  //import 'dhtmlx-gantt/codebase/dhtmlxgantt.css'
  import 'dhtmlx-gantt/codebase/skins/dhtmlxgantt_terrace.css' //皮膚
  import 'dhtmlx-gantt/codebase/locale/locale_cn' // 本地化
  import 'dhtmlx-gantt/codebase/ext/dhtmlxgantt_tooltip.js' //任務條懸浮提示

  export default {
    name: 'Gantt',
    data() {
      return {
        tasks: {
          data: [],
        },
      }
    },
    mounted() {
      this.initData()
      /*
       * 冒煙:fcca02    單元:fec0dc     回歸:62ddd4   階段:d1a6ff
       * */
      //設置圖表區(qū)域的日期坐標最大值 var date = new Date(dateString.replace(/-/,"/"))
      //  gantt.config.start_date = new Date("2020-04-08".replace(/-/,"/")) ;
      //gantt.config.end_date = new Date("2020-04-18".replace(/-/,"/")) ; //結束時間需要+1天

      //自適應甘特圖的尺寸大小, 使得在不出現滾動條的情況下, 顯示全部任務
      gantt.config.autosize = true
      //只讀模式
      gantt.config.readonly = true
      //是否顯示左側樹表格
      gantt.config.show_grid = false
      //表格列設置
      gantt.config.columns = [
        { name: 'text', label: '階段名字', tree: true, width: '120' },
        {
          name: 'duration',
          label: '時長',
          align: 'center',
          template: function(obj) {
            return obj.duration + '天'
          },
        },
        /*{name:"start_date", label:"開始時間", align: "center" },

        {name:"end_date",   label:"結束時間",   align: "center" },*/
      ]
      //時間軸圖表中,如果不設置,只有行邊框,區(qū)分上下的任務,設置之后帶有列的邊框,整個時間軸變成格子狀。
      gantt.config.show_task_cells = true

      //設置x軸日期
      gantt.config.scale_unit = 'day'
      gantt.config.step = 1
      gantt.config.date_scale = '星期' + '%D'

      //當task的長度改變時,自動調整圖表坐標軸區(qū)間用于適配task的長度
      gantt.config.fit_tasks = true
      // 在時間線上增加一行顯示星期
      gantt.config.subscales = [
        //{unit:"day",  step:1, date:"星期"+"%D" },
        { unit: 'day', step: 1, date: '%M' + '%d' + '日' },
      ]
      //時間軸圖表中,任務條形圖的高度
      gantt.config.task_height = 28
      //時間軸圖表中,甘特圖的高度
      gantt.config.row_height = 36
      //從后端過來的數據格式化
      gantt.config.xml_date = '%Y-%m-%d'
      //任務條顯示內容
      gantt.templates.task_text = function(start, end, task) {
        return task.text + '(' + task.duration + '天)'
      }
      // gantt.templates.task_class = function(start, end, task){return "xx";};
      //懸浮
      gantt.templates.tooltip_text = function(start, end, task) {
        //return "<b>任務名稱:</b> "+task.text+"<br/><b>時長:</b> " + task.duration+"<br/><b>說明:</b>" +task.toolTipsTxt;
        return "<span style='font-size: 14px'>" + task.toolTipsTxt + '</span>'
      }

      gantt.templates.scale_cell_class = function(date) {
        /*if(date.getDay()== 0 || date.getDay()== 6){
          return "weekend";
        }*/
        return 'weekend'
      }
      //任務欄周末亮色
      /*gantt.templates.task_cell_class = function(item,date){
        if(date.getDay()== 0 || date.getDay()== 6){
          return "weekend";
        }
      };*/
      //任務條上的文字大小 以及取消border自帶樣式
      gantt.templates.task_class = function(start, end, item) {
        return item.$level == 0 ? 'firstLevelTask' : 'secondLevelTask'
      }
      // 初始化
      gantt.init(this.$refs.gantt)
      // 數據解析
      gantt.parse(this.tasks)
    },
    methods: {
      //開始時間-結束時間參數
      DateDifference: function(strDateStart, strDateEnd) {
        var begintime_ms = Date.parse(new Date(strDateStart.replace(/-/g, '/'))) //begintime 為開始時間
        var endtime_ms = Date.parse(new Date(strDateEnd.replace(/-/g, '/'))) // endtime 為結束時間
        var date3 = endtime_ms - begintime_ms //時間差的毫秒數
        var days = Math.floor(date3 / (24 * 3600 * 1000))
        return days
      },
      initData: function() {
        this.tasks.data = [
          {
            id: 1,
            text: '計劃時間',
            start_date: '2020-04-08',
            duration: 10,
            open: true, //默認打開,
            toolTipsTxt: 'xxxxxxxxxxxxxxxxx',
          },
          {
            toolTipsTxt: 'xxxxxxxxxxxxxxxxx父任務01-001',
            text: '冒煙階段', // 任務名
            start_date: '2020-04-08', // 開始時間
            id: 11, // 任務id
            duration: 3, // 任務時長,從start_date開始計算
            parent: 1, // 父任務ID
            type: 1,
          },
          {
            toolTipsTxt: '',
            text: '單元測試', // 任務名
            start_date: '2020-04-11', // 開始時間
            id: 12, // 任務id
            duration: 2, // 任務時長,從start_date開始計算
            parent: 1, // 父任務ID
            type: 2,
          },
          {
            toolTipsTxt: '',
            text: '回歸測試', // 任務名
            start_date: '2020-04-13', // 開始時間
            id: 13, // 任務id
            duration: 4, // 任務時長,從start_date開始計算
            parent: 1, // 父任務ID
            type: 3,
          },
          {
            toolTipsTxt: '',
            text: '階段四', // 任務名
            start_date: '2020-04-13', // 開始時間
            id: 14, // 任務id
            duration: 4, // 任務時長,從start_date開始計算
            parent: 1, // 父任務ID
            type: 4,
          },
          //========================
          {
            id: 2,
            text: '實際時間',
            start_date: '2020-04-08',
            duration: 8,
            open: true, //默認打開,才可隱藏左側表格
            toolTipsTxt: 'xxxxxxxxxxxxxxxxx',
            state: 'default',
            // color:"#409EFF",
            //progress: 0.6
          },
          {
            toolTipsTxt: 'xxxxxxxxxxxxxxxxx父任務01-001',
            text: '冒煙階段', // 任務名
            start_date: '2020-04-08', // 開始時間
            id: 21, // 任務id
            duration: 2, // 任務時長,從start_date開始計算
            parent: 2, // 父任務ID
            type: 1,
          },
          {
            toolTipsTxt: '',
            text: '單元測試', // 任務名
            start_date: '2020-04-09', // 開始時間
            id: 22, // 任務id
            duration: 2, // 任務時長,從start_date開始計算
            parent: 2, // 父任務ID
            type: 2,
          },
          {
            toolTipsTxt: '',
            text: '回歸測試', // 任務名
            start_date: '2020-04-11', // 開始時間
            id: 23, // 任務id
            duration: 2, // 任務時長,從start_date開始計算
            parent: 2, // 父任務ID
            type: 3,
          },
        ].map(function(current, ind, arry) {
          var newObj = {}
          if (current.type) {
            //存在type字段 說明非一級菜單,判斷階段的具體類型 設置不同顏色
            if (current.type == 1) {
              //冒煙
              newObj = Object.assign({}, current, { color: '#fcca02' })
            } else if (current.type == 2) {
              //單元
              newObj = Object.assign({}, current, { color: '#fec0dc' })
            } else if (current.type == 3) {
              //回歸
              newObj = Object.assign({}, current, { color: '#62ddd4' })
            } else if (current.type == 4) {
              newObj = Object.assign({}, current, { color: '#d1a6ff' })
            }
          } else {
            //一級菜單是藍色的
            newObj = Object.assign({}, current, { color: '#5692f0' })
          }

          return newObj
        })
      },
    },
  }
</script>
<style lang="scss">
  .firstLevelTask {
    border: none;
    .gantt_task_content {
      // font-weight: bold;
      font-size: 13px;
    }
  }

  .secondLevelTask {
    border: none;
  }

  .thirdLevelTask {
    border: 2px solid #da645d;
    color: #da645d;
    background: #da645d;
  }

  .milestone-default {
    border: none;
    background: rgba(0, 0, 0, 0.45);
  }

  .milestone-unfinished {
    border: none;
    background: #5692f0;
  }

  .milestone-finished {
    border: none;
    background: #84bd54;
  }

  .milestone-canceled {
    border: none;
    background: #da645d;
  }

  html,
  body {
    margin: 0px;
    padding: 0px;
    height: 100%;
    overflow: hidden;
  }

  .container {
    height: 900px;
    .left-container {
      height: 100%;
    }
  }

  .left-container {
    height: 600px;
  }

  .gantt_scale_line {
    border-top: 0;
  }

  .weekend {
    //background:#f4f7f4!important;
    color: #000000 !important;
  }

  .gantt_selected .weekend {
    background: #f7eb91 !important;
  }

  .gantt_task_content {
    text-align: left;
    padding-left: 10px;
  }

  //上面任務條樣式
  .gantt_task_scale {
    height: 45px !important;
  }

  .gantt_task .gantt_task_scale .gantt_scale_cell {
    line-height: 30px !important;
    height: 28px !important;
  }
</style>

3、組件代碼2

<!--
 * @Author: your name
 * @Date: 2021-07-22 11:01:08
 * @LastEditTime: 2022-03-16 14:42:54
 * @LastEditors: Please set LastEditors
 * @Description: 打開koroFileHeader查看配置 進行設置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 * @FilePath: \internetPlatform\src\views\iot\systemManage\test2.vue
-->
<template>
  <div>
    <div ref="gantt" style="height:80vh" />
  </div>
</template>

<script>
  import gantt from 'dhtmlx-gantt'
  import 'dhtmlx-gantt/codebase/dhtmlxgantt.css'
  export default {
    data() {
      return {
        // 甘特圖配置
        tasks: {
          data: [
            {
              id: 11,
              text: 'Project #1',
              type: gantt.config.types.project,
              progress: 0.6,
              open: true,
            },

            {
              id: 12,
              text: 'Task #1',
              start_date: '03-04-2022',
              duration: '5',
              parent: '11',
              progress: 1,
              open: true,
            },
            {
              id: 13,
              text: 'Task #2',
              start_date: '03-04-2022',
              type: gantt.config.types.project,
              parent: '11',
              progress: 0.5,
              open: true,
            },
            {
              id: 14,
              text: 'Task #3',
              start_date: '02-04-2022',
              duration: '6',
              parent: '11',
              progress: 0.8,
              open: true,
            },
            {
              id: 15,
              text: 'Task #4',
              type: gantt.config.types.project,
              parent: '11',
              progress: 0.2,
              open: true,
            },
            {
              id: 16,
              text: 'Final milestone',
              start_date: '15-04-2022',
              type: gantt.config.types.milestone,
              parent: '11',
              progress: 0,
              open: true,
            },

            {
              id: 17,
              text: 'Task #2.1',
              start_date: '03-04-2022',
              duration: '2',
              parent: '13',
              progress: 1,
              open: true,
            },
            {
              id: 18,
              text: 'Task #2.2',
              start_date: '06-04-2022',
              duration: '3',
              parent: '13',
              progress: 0.8,
              open: true,
            },
            {
              id: 19,
              text: 'Task #2.3',
              start_date: '10-04-2022',
              duration: '4',
              parent: '13',
              progress: 0.2,
              open: true,
            },
            {
              id: 20,
              text: 'Task #2.4',
              start_date: '10-04-2022',
              duration: '4',
              parent: '13',
              progress: 0,
              open: true,
            },
            {
              id: 21,
              text: 'Task #4.1',
              start_date: '03-04-2022',
              duration: '4',
              parent: '15',
              progress: 0.5,
              open: true,
            },
            {
              id: 22,
              text: 'Task #4.2',
              start_date: '03-04-2022',
              duration: '4',
              parent: '15',
              progress: 0.1,
              open: true,
            },
            {
              id: 23,
              text: 'Mediate milestone',
              start_date: '14-04-2022',
              type: gantt.config.types.milestone,
              parent: '15',
              progress: 0,
              open: true,
            },
          ],
          links: [
            { id: '10', source: '11', target: '12', type: '1' },
            { id: '11', source: '11', target: '13', type: '1' },
            { id: '12', source: '11', target: '14', type: '1' },
            { id: '13', source: '11', target: '15', type: '1' },
            { id: '14', source: '23', target: '16', type: '0' },
            { id: '15', source: '13', target: '17', type: '1' },
            { id: '16', source: '17', target: '18', type: '0' },
            { id: '17', source: '18', target: '19', type: '0' },
            { id: '18', source: '19', target: '20', type: '0' },
            { id: '19', source: '15', target: '21', type: '2' },
            { id: '20', source: '15', target: '22', type: '2' },
            { id: '21', source: '15', target: '23', type: '0' },
          ],
        },
      }
    },

    mounted() {
      this.init()
    },
    methods: {
      // 初始化
      init() {
        // 自動延長時間刻度
        gantt.config.fit_tasks = true
        // 允許拖放
        gantt.config.drag_project = true
        // 定義時間格式
        gantt.config.scales = [
          { unit: 'month', step: 1, date: '%F, %Y' },
          { unit: 'day', step: 1, date: '%j, %D' },
        ]
        // 添加彈窗屬性
        gantt.config.lightbox.sections = [
          {
            name: 'description',
            height: 70,
            map_to: 'text',
            type: 'textarea',
            focus: true,
          },
          { name: 'type', type: 'typeselect', map_to: 'type' },
          { name: 'time', type: 'duration', map_to: 'auto' },
        ]
        // 初始化
        gantt.init(this.$refs.gantt)
        // 數據解析
        gantt.parse(this.tasks)
      },
    },
  }
</script>
<style lang="scss" scoped>
  .firstLevelTask {
    border: none;
    .gantt_task_content {
      // font-weight: bold;
      font-size: 13px;
    }
  }

  .secondLevelTask {
    border: none;
  }

  .thirdLevelTask {
    border: 2px solid #da645d;
    color: #da645d;
    background: #da645d;
  }

  .milestone-default {
    border: none;
    background: rgba(0, 0, 0, 0.45);
  }

  .milestone-unfinished {
    border: none;
    background: #5692f0;
  }

  .milestone-finished {
    border: none;
    background: #84bd54;
  }

  .milestone-canceled {
    border: none;
    background: #da645d;
  }

  html,
  body {
    margin: 0px;
    padding: 0px;
    height: 100%;
    overflow: hidden;
  }

  .container {
    height: 900px;
    .left-container {
      height: 100%;
    }
  }

  .left-container {
    height: 600px;
  }

  .gantt_scale_line {
    border-top: 0;
  }

  .weekend {
    //background:#f4f7f4!important;
    color: #000000 !important;
  }

  .gantt_selected .weekend {
    background: #f7eb91 !important;
  }

  .gantt_task_content {
    text-align: left;
    padding-left: 10px;
  }

  //上面任務條樣式
  .gantt_task_scale {
    height: 45px !important;
  }

  .gantt_task .gantt_task_scale .gantt_scale_cell {
    line-height: 30px !important;
    height: 28px !important;
  }
</style>

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 如何在Vue中抽離接口配置文件

    如何在Vue中抽離接口配置文件

    這篇文章主要介紹了Vue中抽離接口配置文件的問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • vue實現拖拽效果

    vue實現拖拽效果

    這篇文章主要為大家詳細介紹了vue實現拖拽效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • Vue使用Element-UI生成并展示表頭序號的方法

    Vue使用Element-UI生成并展示表頭序號的方法

    序號算是在展示數據的時候,一種很普遍的屬性了,我們可以自己寫生成序號的規(guī)則,也可以借助第三方,這篇文章主要介紹了Vue使用Element-UI生成并展示表頭序號的方法,需要的朋友可以參考下
    2023-01-01
  • 公共Hooks封裝報表導出useExportExcel實現詳解

    公共Hooks封裝報表導出useExportExcel實現詳解

    這篇文章主要為大家介紹了公共Hooks封裝報表導出useExportExcel實現詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • vue如何動態(tài)獲取當前時間

    vue如何動態(tài)獲取當前時間

    這篇文章主要介紹了vue如何動態(tài)獲取當前時間問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 使用Vue3和ApexCharts繪制交互式熱力圖

    使用Vue3和ApexCharts繪制交互式熱力圖

    熱力圖是一種數據可視化技術,它使用顏色來表示數據點的值,熱力圖常用于可視化分布數據,例如人口密度、溫度變化或網站流量,本文給大家介紹了如何使用Vue3和ApexCharts創(chuàng)建交互式熱力圖,需要的朋友可以參考下
    2024-06-06
  • Vue基于el-breadcrumb實現面包屑功能(操作代碼)

    Vue基于el-breadcrumb實現面包屑功能(操作代碼)

    這篇文章主要介紹了Vue基于el-breadcrumb實現面包屑功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • 詳解Vue2如何監(jiān)聽數組的變化

    詳解Vue2如何監(jiān)聽數組的變化

    這篇文章主要來和大家詳細探討一下Vue2中是如何監(jiān)聽數組的變化的,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03
  • vue-cli3項目在IE瀏覽器打開兼容問題及解決

    vue-cli3項目在IE瀏覽器打開兼容問題及解決

    這篇文章主要介紹了vue-cli3項目在IE瀏覽器打開兼容問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue刷新子組件、重置組件以及重新加載子組件項目實戰(zhàn)記錄

    vue刷新子組件、重置組件以及重新加載子組件項目實戰(zhàn)記錄

    在vue開發(fā)中出于各種目的,我們常常需要讓組件重新加載渲染,這篇文章主要給大家介紹了關于vue刷新子組件、重置組件以及重新加載子組件的相關資料,需要的朋友可以參考下
    2023-12-12

最新評論