{"version":3,"file":"table-layout.mjs","sources":["../../../../../src/components/ivue-table/table-layout.ts"],"sourcesContent":["import { isRef, ref, nextTick } from 'vue';\r\nimport { hasOwn } from '@vue/shared';\r\n\r\n// ts\r\nimport type { Ref } from 'vue';\r\nimport type { Store } from './store';\r\nimport type { Table } from './table/defaults';\r\nimport type { TableColumnCtx } from './table-column/defaults';\r\nimport type { TableHeader } from './table-header/types';\r\n\r\nclass TableLayout {\r\n  store!: Store;\r\n  table!: Table;\r\n  fit: boolean | undefined;\r\n  showHeader: boolean | undefined;\r\n  scrollX: Ref<boolean>;\r\n  scrollY: Ref<boolean>;\r\n  bodyWidth: Ref<null | number>;\r\n  observers: TableHeader[];\r\n  height: Ref<null | number>;\r\n  gutterWidth: number;\r\n\r\n  constructor(options: Record<string, any>) {\r\n    // 表格 scrollX\r\n    this.scrollX = ref<boolean>(false);\r\n\r\n    // 表格 scrollY\r\n    this.scrollY = ref<boolean>(false);\r\n\r\n    // 表格宽度\r\n    this.bodyWidth = ref<null | number>(null);\r\n\r\n    // 表格高度\r\n    this.height = ref<null | number>(null);\r\n\r\n    // 观察者列表\r\n    this.observers = [];\r\n\r\n    // 排水沟宽度\r\n    this.gutterWidth = 0;\r\n\r\n    // 设置内部函数\r\n    for (const name in options) {\r\n      // 检测是否属性是否拥有\r\n      if (hasOwn(options, name)) {\r\n        // 检查值是否为一个 ref 对象。\r\n        if (isRef(this[name])) {\r\n          this[name as string].value = options[name];\r\n        }\r\n        // 其他\r\n        else {\r\n          this[name as string] = options[name];\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  // 扁平化列\r\n  getFlattenColumns(): TableColumnCtx[] {\r\n    const flattenColumns = [];\r\n\r\n    // 列\r\n    const columns = this.table.store.states.columns.value;\r\n\r\n    columns.forEach((column) => {\r\n      flattenColumns.push(column);\r\n    });\r\n\r\n    return flattenColumns;\r\n  }\r\n\r\n  // 添加观察者\r\n  addObserver(observer: TableHeader) {\r\n    this.observers.push(observer);\r\n  }\r\n\r\n  // 移除观察者\r\n  removeObserver(observer: TableHeader) {\r\n    const index = this.observers.indexOf(observer);\r\n\r\n    if (index !== -1) {\r\n      this.observers.splice(index, 1);\r\n    }\r\n  }\r\n\r\n  // 通知观察者\r\n  notifyObservers(event: string) {\r\n    const observers = this.observers;\r\n\r\n    observers.forEach((item) => {\r\n      // 设置列的宽度\r\n      if (event === 'columns') {\r\n        item.state?.handleColumnsChange(this);\r\n      }\r\n\r\n      // 设置滚动宽度\r\n      if (event === 'scrollable') {\r\n        item.state?.handleScrollableWidthChange(this);\r\n      }\r\n    });\r\n  }\r\n\r\n  // 更新列宽度\r\n  updateColumnsWidth() {\r\n    // 列的宽度是否自撑开\r\n    const fit = this.fit;\r\n    // 获取表宽度\r\n    const bodyWidth = this.table.vnode.el?.clientWidth;\r\n    // 扁平化列\r\n    const flattenColumns = this.getFlattenColumns();\r\n    // 需要自动撑开的列\r\n    const flexColumns = flattenColumns.filter(\r\n      (item) => typeof item.width !== 'number'\r\n    );\r\n\r\n    // 最小宽度\r\n    let bodyMinWidth = 0;\r\n\r\n    // 重置列的宽度\r\n    flattenColumns.forEach((item) => {\r\n      // 初始化列宽度\r\n      if (typeof item.width === 'number' && item.columnWidth)\r\n        item.columnWidth = 0;\r\n    });\r\n\r\n    // 列的宽度是否自撑开\r\n    if (flexColumns.length > 0 && fit) {\r\n      flattenColumns.forEach((item) => {\r\n        // 获取所有列相加的宽度\r\n        bodyMinWidth += Number(item.width || item.minWidth || 80);\r\n      });\r\n\r\n      // 不是滚动的表格\r\n      if (bodyMinWidth <= bodyWidth) {\r\n        // 表格 scrollX\r\n        this.scrollX.value = false;\r\n\r\n        // 可以自动撑开的宽度\r\n        const totalFlexWidth = bodyWidth - bodyMinWidth;\r\n\r\n        // 只有一个自动撑开的列沾满屏幕剩余宽度\r\n        if (flexColumns.length === 1) {\r\n          flexColumns[0].columnWidth =\r\n            Number(flexColumns[0].minWidth || 80) + totalFlexWidth;\r\n        }\r\n        // 多个自动撑开列\r\n        else {\r\n          // 获取自动撑开列的最小宽度 数量 * 80\r\n          const allColumnWidth = flexColumns.reduce(\r\n            (prev, item) => prev + Number(item.minWidth || 80),\r\n            0\r\n          );\r\n\r\n          // 可以自动撑开的宽度 / 所有列加起来的宽度 = 弹性像素\r\n          const flexWidthPerPixel = totalFlexWidth / allColumnWidth;\r\n\r\n          // 不是第一个的宽度\r\n          let noneFirstWidth = 0;\r\n\r\n          // 自动撑开的列\r\n          flexColumns.forEach((item, index) => {\r\n            // 忽略第一个\r\n            if (index === 0) {\r\n              return;\r\n            }\r\n\r\n            // 列的宽度 * 弹性像素\r\n            const flexWidth = Math.floor(\r\n              Number(item.minWidth || 80) * flexWidthPerPixel\r\n            );\r\n\r\n            // 剩余可撑开宽度\r\n            noneFirstWidth += flexWidth;\r\n\r\n            // 列的宽度 + 弹性宽度 (最小80 + 弹性宽度)\r\n            item.columnWidth = Number(item.minWidth || 80) + flexWidth;\r\n          });\r\n\r\n          // 自动撑开的第一个宽度等于剩余的宽度\r\n          flexColumns[0].columnWidth =\r\n            Number(flexColumns[0].minWidth || 80) +\r\n            totalFlexWidth -\r\n            noneFirstWidth;\r\n        }\r\n      }\r\n      // 是滚动表格\r\n      else {\r\n        // x轴滚动\r\n        this.scrollX.value = true;\r\n\r\n        // 设置列宽度为最小宽度\r\n        flexColumns.forEach((item) => {\r\n          item.columnWidth = Number(item.minWidth);\r\n        });\r\n      }\r\n\r\n      // 设置表格快读\r\n      this.bodyWidth.value = Math.max(bodyMinWidth, bodyWidth);\r\n      // 调整表格大小\r\n      this.table.state.resizeState.value.width = this.bodyWidth.value;\r\n    }\r\n    // 不是自动撑开\r\n    else {\r\n      flattenColumns.forEach((item) => {\r\n        // 没有宽度\r\n        if (!item.width && !item.minWidth) {\r\n          item.columnWidth = 80;\r\n        }\r\n        // 有宽度\r\n        else {\r\n          item.columnWidth = Number(item.width || item.minWidth);\r\n        }\r\n\r\n        // 表格宽度\r\n        bodyMinWidth += item.columnWidth;\r\n      });\r\n\r\n      // x轴是否可以滚动 内容的最小宽度 > 表格的宽度\r\n      this.scrollX.value = bodyMinWidth > bodyWidth;\r\n\r\n      // 表格宽度\r\n      this.bodyWidth.value = bodyMinWidth;\r\n    }\r\n\r\n    // 通知观察者\r\n    this.notifyObservers('columns');\r\n  }\r\n\r\n  // 设置高度\r\n  setHeight(value: string | number, prop = 'height') {\r\n    const el = this.table.vnode.el!;\r\n\r\n    // 高度转换类型\r\n    value = this.parseHeight(value);\r\n\r\n    this.height.value = Number(value);\r\n\r\n    // 没有节点下个线程执行\r\n    if (!el && (value || value === 0)) {\r\n      return nextTick(() => {\r\n        this.setHeight(value, prop);\r\n      });\r\n    }\r\n\r\n    // number\r\n    if (typeof value === 'number') {\r\n      el.style[prop] = `${value}px`;\r\n\r\n      // 更新表格高度\r\n      this.updateTableContentHeight();\r\n    }\r\n    // string\r\n    else if (typeof value === 'string') {\r\n      el.style[prop] = value;\r\n\r\n      // 更新表格高度\r\n      this.updateTableContentHeight();\r\n    }\r\n  }\r\n\r\n  // 设置最大高度\r\n  setMaxHeight(value: string | number) {\r\n    this.setHeight(value, 'max-height');\r\n  }\r\n\r\n  // 设置高度\r\n  parseHeight(height: number | string) {\r\n    // number\r\n    if (typeof height === 'number') {\r\n      return height;\r\n    }\r\n\r\n    // string\r\n    if (typeof height === 'string') {\r\n      // 是否有px\r\n      if (/^\\d+(?:px)?$/.test(height)) {\r\n        return Number.parseInt(height, 10);\r\n      }\r\n      // 其他\r\n      else {\r\n        return height;\r\n      }\r\n    }\r\n\r\n    return 0;\r\n  }\r\n\r\n  // 更新表格高度\r\n  updateTableContentHeight() {\r\n    // 更新y轴滚动高度\r\n    this.updateScrollY();\r\n\r\n    // 设置滚动高度\r\n    this.notifyObservers('scrollable');\r\n  }\r\n\r\n  // 更新y轴滚动高度\r\n  updateScrollY() {\r\n    const height = this.height.value;\r\n\r\n    // 高度未初始化时为空\r\n    // 表格初始化后，未配置高度时，高度为0\r\n\r\n    if (!height) {\r\n      return false;\r\n    }\r\n\r\n    // 滚动条dom\r\n    const scrollbar = this.table.refs.scrollbar;\r\n\r\n    // 是否渲染完成\r\n    if (this.table.vnode.el && scrollbar) {\r\n      let scrollY = true;\r\n\r\n      // 之前的值\r\n      const prevScrollY = this.scrollY.value;\r\n\r\n      // 是否可以滚动\r\n      scrollY =\r\n        scrollbar.scrollbarWrapper.scrollHeight >\r\n        scrollbar.scrollbarWrapper.clientHeight;\r\n\r\n      // 是否可以滚动\r\n      this.scrollY.value = scrollY;\r\n\r\n      // 是否相等 是否有滚动过\r\n      return prevScrollY !== scrollY;\r\n    }\r\n\r\n    return false;\r\n  }\r\n}\r\n\r\nexport default TableLayout;\r\n"],"names":[],"mappings":"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"}