{"version":3,"file":"gantt.vue2.mjs","sources":["../../../../../../packages/components/gantt/src/gantt.vue"],"sourcesContent":["<template>\r\n  <div :class=\"bem.b()\" :style=\"styleConfig\">\r\n    <div ref=\"ganttContainer\" :class=\"bem.e('container')\"></div>\r\n  </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { createNamespace } from '@ll-plus/utils'\r\nimport { gantt } from 'dhtmlx-gantt'\r\nimport 'dhtmlx-gantt/codebase/dhtmlxgantt.css'\r\nimport { debounce } from 'lodash-es'\r\nimport { computed, onMounted, onUnmounted, ref, watch } from 'vue'\r\nimport { defaultColumns, ganttProps } from './gantt'\r\n\r\n// 组件名称\r\ndefineOptions({\r\n  name: 'LlGantt',\r\n})\r\n\r\nconst props = defineProps(ganttProps)\r\nconst bem = createNamespace('gantt')\r\n\r\nconst ganttContainer = ref()\r\nconst ganttInstance = ref()\r\n\r\nconst events = ref([] as string[])\r\n\r\nconst styleConfig = computed(() => ({\r\n  // 任务条背景颜色\r\n  '--gantt-task-line-bg':\r\n    props.taskLineBg || 'var(--dhx-gantt-task-background)',\r\n  // 悬浮行背景颜色\r\n  '--gantt-hover-row-bg':\r\n    props.hoverRowBg || 'var(--dhx-gantt-base-colors-hover-color)',\r\n  // 选中行背景颜色\r\n  '--gantt-selected-bg':\r\n    props.selectedRowBg || 'var(--dhx-gantt-base-colors-select)',\r\n  // 表头背景颜色\r\n  '--gantt-grid-scale-bg':\r\n    props.gridScaleBg || 'var(--dhx-gantt-timeline-scale-background)',\r\n}))\r\n\r\nconst ganttConfig = computed(() => ({\r\n  scroll_size: props.scrollSize, // 滚动条大小\r\n  date_format: props.dateFormat, // 日期格式\r\n  show_grid: props.showGrid, // 是否显示网格\r\n  readonly: props.readonly, // 只读\r\n  select_task: props.selectTask, // 选择任务\r\n  show_task_cells: props.showTaskCells, // 是否显示任务单元格\r\n  grid_width: props.gridWidth, // 网格宽度\r\n  work_time: props.workTime, // 是否显示工作时间\r\n  correct_work_time: props.correctWorkTime, // 是否修正工作时间\r\n  duration_unit: props.durationUnit, // 工期单位\r\n  duration_step: props.durationStep, // 工期单位步长\r\n  show_progress: props.showProgress, // 显示进度\r\n  drag_progress: props.dragProgress, // 允许任务拖动进度\r\n  order_branch: props.orderBranch, // 允许行拖拽排布任务\r\n  order_branch_free: props.orderBranchFree, // 允许行拖拽任意位置排布任\r\n  scale_height: props.scaleHeight, // 表头高度\r\n  row_height: props.rowHeight, // 表格行高度\r\n  resize_rows: props.resizeRows, // 允许拖拽调整行高\r\n  bar_height: props.barHeight, // 任务条高度\r\n  drag_resize: props.dragResize, // 允许拖拽调整任务时间\r\n  reorder_grid_columns: props.reorderGridColumns, // 允许拖拽表格列\r\n  round_dnd_dates: props.roundDndDates, // 拖拽任务时自动对齐单元格\r\n  time_step: props.timeStep, // 拖拽任务时间步长\r\n  link_radius: props.linkRadius, // 连接线半径\r\n  link_line_width: props.linkLineWidth, // 连接线宽度\r\n  min_column_width: props.minColumnWidth, // 时间轴最小列宽\r\n  open_tree_initially: props.openTreeInitially, // 展开所有任务\r\n  drag_links: props.dragLinks, // 允许拖拽连接线\r\n  drag_move: props.dragMove, // 允许拖拽移动任务\r\n\r\n  // 列配置\r\n  columns: props.columns?.length ? props.columns : defaultColumns,\r\n  // 时间轴日期刻度\r\n  scales: props.scales?.length\r\n    ? props.scales\r\n    : [{ unit: 'day', step: 1, format: '%m月%d' }],\r\n\r\n  // 额外配置合并\r\n  ...(props.extraConfig || {}),\r\n}))\r\n\r\nconst ganttTemplates = computed(() => props.extraTemplates || {})\r\n\r\n// 初始化甘特图\r\nconst initGantt = () => {\r\n  if (!ganttContainer.value) return\r\n\r\n  gantt.i18n.setLocale('cn') // 设置语言为中文\r\n  gantt.plugins({\r\n    multiselect: true,\r\n  })\r\n\r\n  Object.assign(gantt.config, ganttConfig.value)\r\n  Object.assign(gantt.templates, ganttTemplates.value)\r\n\r\n  // 初始化\r\n  gantt.init(ganttContainer.value)\r\n\r\n  // 事件绑定\r\n  Object.keys(props.eventMap).forEach((eventName: any) => {\r\n    const config = props.eventMap[eventName]\r\n    events.value.push(gantt.attachEvent(eventName, config.handle))\r\n  })\r\n  // 点击空区域时取消选中所有任务\r\n  if (!Object.keys(props.eventMap).includes('onEmptyClick')) {\r\n    events.value.push(\r\n      gantt.attachEvent('onEmptyClick', (e: Event) => {\r\n        // 点击连接线时不取消选中所有任务\r\n        if (\r\n          gantt.utils.dom.closest(\r\n            e.target as HTMLElement,\r\n            '[' + gantt.config.link_attribute + ']'\r\n          )\r\n        ) {\r\n          return\r\n        }\r\n\r\n        // 多选\r\n        if (props.multiselect) {\r\n          const selectedTaskIds = gantt.getSelectedTasks()\r\n          selectedTaskIds.forEach((id) => {\r\n            gantt.unselectTask(id)\r\n          })\r\n        }\r\n        // 单选\r\n        else {\r\n          const selectedTaskId = gantt.getSelectedId()\r\n          if (selectedTaskId) {\r\n            gantt.unselectTask(selectedTaskId)\r\n          }\r\n        }\r\n\r\n        return true\r\n      })\r\n    )\r\n  }\r\n\r\n  // 加载数据\r\n  gantt.parse(props.data)\r\n\r\n  ganttInstance.value = gantt\r\n}\r\n\r\n// 重置甘特图数据\r\nconst resetGantt = () => {\r\n  if (!ganttInstance.value) return\r\n\r\n  // 清空数据\r\n  ganttInstance.value.clearAll()\r\n\r\n  while (events.value.length) gantt.detachEvent(events.value.pop()!)\r\n\r\n  ganttInstance.value.scrollTo(0, 0) // 滚动到顶部\r\n  ganttInstance.value.unselectAll?.() // 取消所有选中任务\r\n\r\n  ganttInstance.value.render()\r\n}\r\n\r\nconst render = debounce(() => {\r\n  ganttInstance.value?.render()\r\n}, 100)\r\n\r\nwatch(\r\n  ganttConfig,\r\n  (config) => {\r\n    if (!ganttInstance.value) return\r\n\r\n    Object.assign(ganttInstance.value.config, config)\r\n\r\n    render()\r\n  },\r\n  { deep: true }\r\n)\r\n\r\n// 监听模板配置变化\r\nwatch(\r\n  ganttTemplates,\r\n  (newTemplates) => {\r\n    if (ganttInstance.value) {\r\n      Object.assign(ganttInstance.value.templates, newTemplates)\r\n      render()\r\n    }\r\n  },\r\n  { deep: true }\r\n)\r\n\r\n// 挂载\r\nonMounted(() => {\r\n  initGantt()\r\n})\r\n\r\n// 卸载\r\nonUnmounted(() => {\r\n  resetGantt()\r\n})\r\n\r\ndefineExpose({\r\n  getInstance: () => ganttInstance.value, // 甘特图实例\r\n  resetGantt,\r\n})\r\n</script>\r\n"],"names":["_createElementBlock","_normalizeClass","_unref","_createElementVNode"],"mappings":"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"}