{"version":3,"file":"use-columns.mjs","sources":["../../../../../packages/components/multiple-form/src/use-columns.tsx"],"sourcesContent":["import type { ElTable, TableColumn } from '@element-ultra/components/table'\nimport { ElButton } from '@element-ultra/components/button'\nimport { ElTooltip } from '@element-ultra/components/tooltip'\nimport { ElIcon } from '@element-ultra/components/icon'\nimport { ElCheckbox } from '@element-ultra/components/checkbox'\nimport { dialogInjectionKey } from '@element-ultra/components/dialog/src/token'\nimport {\n  computed,\n  isVNode,\n  ShallowReactive,\n  Slots,\n  ShallowRef,\n  onMounted,\n  onBeforeUnmount,\n  watch\n} from 'vue'\nimport type {\n  MultipleFormProps,\n  MultipleFormRow,\n  MultipleFormEmits,\n  ActionType\n} from './type'\nimport {\n  Insert,\n  InfoFilled,\n  Edit,\n  Delete,\n  Select,\n  Close,\n  Rank,\n  AddChild\n} from 'icon-ultra'\nimport type { UseNamespaceReturn } from '@element-ultra/hooks'\nimport type useRows from './use-rows'\nimport Sortable from 'sortablejs'\nimport { nextTick, inject } from 'vue'\n\ninterface Options {\n  props: MultipleFormProps\n  slots: Slots\n  errorTips: ShallowReactive<Record<string, any>>\n  ns: UseNamespaceReturn\n  root: MultipleFormRow\n  tableRef: ShallowRef<InstanceType<typeof ElTable> | undefined>\n  /** 插入数据 */\n  insertTo: ReturnType<typeof useRows>['insertTo']\n  emit: MultipleFormEmits\n  delRow: (indexes: number | number[]) => void\n  validate: (row: MultipleFormRow) => Promise<boolean>\n  open: (type: 'create' | 'update', options: any) => void\n  emitChange: () => void\n}\n\nexport default function useColumns(options: Options) {\n  const {\n    props,\n    errorTips,\n    slots,\n    ns,\n    root,\n    tableRef,\n    emit,\n    delRow,\n    open,\n    validate,\n    insertTo,\n    emitChange\n  } = options\n\n  const sortable = computed(() => {\n    return props.sortable && !props.tree\n  })\n\n  const exchange = (arr: any[], oIndex: number, nIndex: number) => {\n    if (oIndex < nIndex) {\n      return [\n        ...arr.slice(0, oIndex),\n        ...arr.slice(oIndex + 1, nIndex + 1),\n        arr[oIndex],\n\n        ...arr.slice(nIndex + 1)\n      ]\n    } else {\n      return [\n        ...arr.slice(0, nIndex),\n        arr[oIndex],\n        ...arr.slice(nIndex, oIndex),\n        ...arr.slice(oIndex + 1)\n      ]\n    }\n  }\n\n  const sort = () => {\n    if (!sortable.value) return\n    stopSort()\n\n    const tbody =\n      tableRef.value?.tableDom?.getElementsByClassName('el-table__body')?.[0]\n    if (!tbody) return\n    sortInstance = new Sortable(tbody as HTMLElement, {\n      animation: 150,\n      ghostClass: 'el-multiple-form__sort-ghost',\n      handle: '.el-multiple-form__sort-handle',\n\n      onSort(e) {\n        const { oldIndex, newIndex } = e\n        if (oldIndex === undefined || newIndex === undefined) return\n        root.children = exchange(root.children!, oldIndex, newIndex)\n        emitChange()\n      }\n    })\n  }\n\n  const stopSort = () => {\n    sortInstance?.destroy()\n    sortInstance = null\n  }\n\n  watch(sortable, s => {\n    s ? nextTick(() => sort()) : stopSort()\n  })\n\n  let sortInstance: Sortable | null = null\n\n  onMounted(() => {\n    sort()\n  })\n\n  onBeforeUnmount(() => {\n    stopSort()\n  })\n\n  let currentEditRow: MultipleFormRow | null = null\n\n  watch([() => props.data, () => props.mode], () => {\n    currentEditRow = null\n  })\n\n  /** 重置当前编辑行 */\n  const resetCurrentRow = () => {\n    if (currentEditRow) {\n      // 未经保存的row直接删除\n      if (!currentEditRow.saved) {\n        delRow(currentEditRow.indexes)\n        currentEditRow = null\n      } else {\n        currentEditRow.status = 'view'\n      }\n    }\n  }\n\n  const { dialogVisible } = inject(dialogInjectionKey, undefined) || {}\n\n  /**\n   * 生成行的原始数据\n   */\n  const makeRowOriginalData = () => {\n    return (props.columns || []).reduce((acc, cur) => {\n      let value = cur.defaultValue\n      if (value instanceof Function) {\n        value = value()\n      }\n      acc[cur.key] = value\n      return acc\n    }, {} as Record<string, any>)\n  }\n\n  /**\n   * 新增行内编辑的行\n   * @param parent 父级\n   */\n  const createInlineEditingRow = (\n    parent?: MultipleFormRow | null,\n    index?: number\n  ) => {\n    resetCurrentRow()\n\n    const data = makeRowOriginalData()\n\n    // 在父级下添加子级\n    if (parent) {\n      const { children } = parent\n\n      currentEditRow = insertTo(\n        [...parent.indexes, index ?? children?.length ?? 0],\n        data,\n        'editing'\n      )\n    }\n    // 在根级添加\n    else {\n      currentEditRow = insertTo(index ?? root.children!.length, data, 'editing')\n    }\n  }\n\n  const createDirectEditingRow = (\n    parent?: MultipleFormRow | null,\n    index?: number\n  ) => {\n    const data = makeRowOriginalData()\n    insertTo(\n      parent\n        ? [...parent.indexes, index ?? parent.children?.length ?? 0]\n        : index ?? root.children!.length,\n      data,\n      'view'\n    )\n  }\n\n  /**\n   * 新增函数, 用于表头中的根极新增\n   */\n  const handleCreate = () => {\n    const { mode } = props\n    if (mode === 'inline') {\n      createInlineEditingRow()\n      return\n    }\n\n    if (mode === 'dialog') {\n      return open('create', {\n        title: '新增',\n        ctx: {\n          // 索引路径\n          indexes: [root.children!.length],\n          /** 索引 */\n          index: root.children!.length,\n          /** 父级 */\n          parent: root\n        }\n      })\n    }\n\n    if (mode === 'direct') {\n      createDirectEditingRow()\n      return\n    }\n  }\n\n  /**\n   * 在当前行的下方插入行\n   * @param row 当前行\n   */\n  const handleInsert = (row: MultipleFormRow) => {\n    const index = row.index + 1\n    const { parent } = row\n    const { mode } = props\n    if (mode === 'inline') {\n      return createInlineEditingRow(parent, index)\n    }\n    if (mode === 'dialog') {\n      return open('create', {\n        title: '新增',\n        ctx: {\n          indexes: parent?.indexes ? [...parent.indexes, index] : [index],\n          index: row.index + 1,\n          parent: parent\n        }\n      })\n    }\n    if (mode === 'direct') {\n      return createDirectEditingRow(parent, index)\n    }\n  }\n\n  /** 保存 */\n  const handleSave = async (row: MultipleFormRow) => {\n    const valid = await validate(row)\n    if (!valid) return\n\n    let stopped = false\n\n    if (props.saveMethod) {\n      row.loading = true\n      const result = props.saveMethod({\n        data: row.data,\n        rows: root.children!.map(item => item.data),\n        parent: row.parent?.data,\n        type: !row.saved ? 'create' : 'update',\n        index: row.index,\n        indexes: [...row.indexes]\n      })\n\n      // 异步\n      if (result instanceof Promise) {\n        const asyncResult = await result.finally(() => {\n          row.loading = false\n        })\n        stopped = asyncResult === false\n      } else {\n        row.loading = false\n        stopped = result === false\n      }\n    }\n\n    if (stopped) {\n      // 设当前编辑的行为空\n      currentEditRow = null\n      return\n    }\n\n    emit(\n      'save',\n      row.data,\n      props.data ?? [],\n      !row.saved ? 'create' : 'update',\n      row.parent?.data\n    )\n    emit('node-change', row, !row.saved ? 'create' : 'update')\n\n    row.status = 'view'\n    row.saved = true\n    row.prevData = null\n    // 保存和关闭要将当前编辑的row置空\n    currentEditRow = null\n  }\n\n  /**\n   * 退出编辑\n   * @param row\n   */\n  const handleClose = (row: MultipleFormRow) => {\n    if (!row.saved) {\n      // 未保存的行删掉\n      delRow(row.indexes)\n    } else {\n      if (row.prevData) {\n        Object.assign(row.data, row.prevData)\n      }\n\n      row.status = 'view'\n    }\n    row.prevData = null\n    currentEditRow = null\n  }\n\n  /**\n   * 编辑\n   * @param row 行\n   */\n  const handleEdit = (row: MultipleFormRow) => {\n    emit('edit', row)\n\n    if (props.mode === 'dialog') {\n      open('update', {\n        title: '编辑',\n        ctx: {\n          indexes: row.indexes,\n          index: row.index,\n          parent: row.parent\n        },\n        data: row.data\n      })\n    } else {\n      row.prevData = { ...row.data }\n      resetCurrentRow()\n      row.status = 'editing'\n      currentEditRow = row\n    }\n  }\n\n  /**\n   * 删除行\n   * @param row\n   */\n  const handleDelete = async (row: MultipleFormRow) => {\n    if (props.deleteMethod) {\n      row.loading = true\n\n      const result = props.deleteMethod({\n        data: row.data,\n        saved: row.saved,\n        index: row.index,\n        indexes: [...row.indexes]\n      })\n\n      if (result instanceof Promise) {\n        const asyncResult = await result.finally(() => {\n          row.loading = false\n        })\n\n        if (asyncResult === false) return\n      } else {\n        row.loading = false\n        if (result === false) return\n      }\n    }\n\n    emit('delete', row.data)\n    emit('node-change', row, 'delete')\n    delRow(row.indexes)\n\n    if (row === currentEditRow) {\n      currentEditRow = null\n    }\n  }\n\n  /**\n   * 创建子row\n   * @param row\n   */\n  const handleCreateChild = (row: MultipleFormRow) => {\n    const { mode } = props\n    if (mode === 'inline') {\n      return createInlineEditingRow(row)\n    }\n    if (mode === 'dialog') {\n      const childIndex = row.children?.length ?? 0\n      open('create', {\n        title: '新增子级',\n        ctx: {\n          indexes: [...row.indexes, childIndex],\n          index: childIndex,\n          parent: row\n        }\n      })\n    }\n    if (mode === 'direct') {\n      return createDirectEditingRow(row)\n    }\n  }\n\n  const actionVisible = (type: ActionType, row: MultipleFormRow) => {\n    if (typeof type === 'function') return type(row)\n    return type\n  }\n\n  // 多选相关逻辑\n  const isRowChecked = (row: MultipleFormRow) => {\n    return props.checked.some(item => item === row.data)\n  }\n\n  // 递归获取所有子节点数据\n  const getAllChildrenData = (row: MultipleFormRow): any[] => {\n    const result = [row.data]\n    if (row.children?.length) {\n      row.children.forEach(child => {\n        result.push(...getAllChildrenData(child))\n      })\n    }\n    return result\n  }\n\n  // 递归获取所有节点（包括自身和所有子节点）\n  const getAllNodesFlat = (rows: MultipleFormRow[]): MultipleFormRow[] => {\n    const result: MultipleFormRow[] = []\n    rows.forEach(row => {\n      result.push(row)\n      if (row.children?.length) {\n        result.push(...getAllNodesFlat(row.children))\n      }\n    })\n    return result\n  }\n\n  const handleRowCheck = (row: MultipleFormRow, checked: boolean) => {\n    let newChecked = [...props.checked]\n\n    if (props.tree) {\n      // 树形模式：选中/取消选中当前节点及其所有子节点\n      const allChildrenData = getAllChildrenData(row)\n\n      if (checked) {\n        // 添加当前节点及其所有子节点\n        allChildrenData.forEach(data => {\n          if (!newChecked.some(item => item === data)) {\n            newChecked.push(data)\n          }\n        })\n      } else {\n        // 移除当前节点及其所有子节点\n        newChecked = newChecked.filter(\n          item => !allChildrenData.some(data => data === item)\n        )\n      }\n    } else {\n      // 非树形模式：只处理当前行\n      if (checked) {\n        if (!isRowChecked(row)) {\n          newChecked.push(row.data)\n        }\n      } else {\n        const index = newChecked.findIndex(item => item === row.data)\n        if (index > -1) {\n          newChecked.splice(index, 1)\n        }\n      }\n    }\n\n    emit('update:checked', newChecked)\n  }\n\n  const isAllChecked = computed(() => {\n    if (!root.children?.length) return false\n\n    if (props.tree) {\n      // 树形模式：检查所有节点（包括子节点）是否都被选中\n      const allNodes = getAllNodesFlat(root.children)\n      return allNodes.every(row => isRowChecked(row))\n    } else {\n      // 非树形模式：只检查根级节点\n      return root.children.every(row => isRowChecked(row))\n    }\n  })\n\n  const isIndeterminate = computed(() => {\n    if (!root.children?.length) return false\n\n    if (props.tree) {\n      // 树形模式：检查是否有部分节点被选中\n      const allNodes = getAllNodesFlat(root.children)\n      const checkedCount = allNodes.filter(row => isRowChecked(row)).length\n      return checkedCount > 0 && checkedCount < allNodes.length\n    } else {\n      // 非树形模式：检查根级节点\n      const checkedCount = root.children.filter(row => isRowChecked(row)).length\n      return checkedCount > 0 && checkedCount < root.children.length\n    }\n  })\n\n  const handleCheckAll = (checked: boolean) => {\n    if (!root.children) return\n\n    if (props.tree) {\n      // 树形模式：选中/取消选中所有节点\n      const allNodes = getAllNodesFlat(root.children)\n      const newChecked = checked ? allNodes.map(row => row.data) : []\n      emit('update:checked', newChecked)\n    } else {\n      // 非树形模式：只处理根级节点\n      const newChecked = checked ? root.children.map(row => row.data) : []\n      emit('update:checked', newChecked)\n    }\n  }\n  const cols = computed(() => {\n    const {\n      columns,\n      disabled,\n      actionEdit,\n      actionDelete,\n      actionInsert,\n      tree,\n      mode\n    } = props\n\n    // 操作栏\n    const actionColumn: TableColumn<MultipleFormRow> = {\n      fixed: 'right',\n      key: '$_action',\n      align: 'center',\n      width: props.actionWidth,\n      name: '操作',\n      render: ({ row }) => {\n        const buttons: JSX.Element[] = []\n\n        // 保存按钮\n        row.status === 'editing' &&\n          mode === 'inline' &&\n          buttons.push(\n            <ElButton\n              type='primary'\n              icon={Select}\n              // @ts-ignore\n              title='保存'\n              link\n              loading={row.loading}\n              onClick={() => handleSave(row)}\n            />,\n            <ElButton\n              type='primary'\n              icon={Close}\n              // @ts-ignore\n              title='取消'\n              loading={row.loading}\n              link\n              onClick={() => handleClose(row)}\n            />\n          )\n\n        // 查看状态下显示的按钮\n        if (row.status === 'view') {\n          mode !== 'direct' &&\n            actionVisible(actionEdit, row) &&\n            buttons.push(\n              <ElButton\n                // @ts-ignore\n                title='编辑'\n                type='primary'\n                icon={Edit}\n                link\n                loading={row.loading}\n                onClick={() => handleEdit(row)}\n              />\n            )\n\n          // 新增子级\n          tree &&\n            (props.maxDepth !== undefined\n              ? props.maxDepth > row.depth\n              : true) &&\n            buttons.push(\n              <ElButton\n                // @ts-ignore\n                title='新增子级'\n                type='primary'\n                link\n                loading={row.loading}\n                icon={AddChild}\n                onClick={() => handleCreateChild(row)}\n              />\n            )\n\n          // 在当前行下方插入\n          actionVisible(actionInsert, row) &&\n            buttons.push(\n              <ElButton\n                type='primary'\n                icon={Insert}\n                // @ts-ignore\n                title='在下方插入'\n                link\n                loading={row.loading}\n                onClick={() => handleInsert(row)}\n              />\n            )\n\n          // 删除按钮\n          actionVisible(actionDelete, row) &&\n            buttons.push(\n              <ElButton\n                type='primary'\n                icon={Delete}\n                // @ts-ignore\n                title='删除'\n                link\n                loading={row.loading}\n                onClick={() => handleDelete(row)}\n              />\n            )\n        }\n\n        let actionSlotName = ''\n        if (row.status === 'view') {\n          actionSlotName = 'action:view-mode'\n        } else if (row.status === 'editing') {\n          actionSlotName = 'action:edit-mode'\n        }\n        // ...以后或许会添加其他的\n        const actionSlots = actionSlotName\n          ? slots[actionSlotName]?.({\n              row: row.data,\n              index: row.index,\n              indexes: [...row.indexes]\n            })\n          : ''\n\n        return (\n          <>\n            {actionSlots}\n            {buttons}\n          </>\n        )\n      }\n    }\n\n    // 索引列（合并checkbox功能）\n    const renderIndexIndent = (ctx: any, checkbox?: JSX.Element) => {\n      const { row } = ctx\n      const indent = tree ? (\n        <i\n          class={ns.e('index-line')}\n          style={{\n            width: row.depth * 18 + 'px'\n          }}\n        ></i>\n      ) : null\n      return (\n        <>\n          {indent}\n          {checkbox}\n          <span> {row.index + 1}</span>\n        </>\n      )\n    }\n    const indexColumnRender = props.checkable\n      ? (ctx: any) => {\n          const { row } = ctx\n          return renderIndexIndent(\n            ctx,\n            <ElCheckbox\n              style={{ verticalAlign: 'middle', margin: '0 4px' }}\n              modelValue={isRowChecked(row)}\n              onChange={(checked: boolean) => handleRowCheck(row, checked)}\n            />\n          )\n        }\n      : renderIndexIndent\n\n    const indexColumn: TableColumn<MultipleFormRow> = {\n      name: props.checkable\n        ? () => (\n            <ElCheckbox\n              style={{ margin: '0 4px' }}\n              modelValue={isAllChecked.value}\n              indeterminate={isIndeterminate.value}\n              onChange={handleCheckAll}\n            />\n          )\n        : '#',\n      key: '$_index',\n      align: 'left',\n      fixed: 'left',\n      width: props.checkable ? (tree ? 150 : 80) : tree ? 130 : 60,\n      render: indexColumnRender\n    }\n\n    const tableColumns: TableColumn<MultipleFormRow>[] = columns!\n      .filter(column => column.visible !== false)\n      .map(column => {\n        const errTip = errorTips[column.key]\n        const required = !!column.rules?.required\n\n        const content =\n          errTip && (!dialogVisible || dialogVisible.value) ? (\n            <ElTooltip\n              placement='top'\n              visible\n              effect='dark'\n              content={errTip}\n              raw-content\n            >\n              <span style='color: #f00; vertical-align: middle'>\n                {column.name}\n              </span>\n            </ElTooltip>\n          ) : (\n            <span\n              class={[ns.is('required', required)]}\n              style='vertical-align: middle'\n            >\n              {column.name}\n            </span>\n          )\n\n        const tip =\n          column.tips && (!dialogVisible || dialogVisible.value) ? (\n            <ElTooltip effect='dark' content={column.tips} raw-content>\n              <ElIcon style='vertical-align: middle'>\n                <InfoFilled />\n              </ElIcon>\n            </ElTooltip>\n          ) : null\n\n        const { summary } = column\n\n        return {\n          name: () => (\n            <>\n              {content}\n              {tip}\n            </>\n          ),\n          fixed: column.fixed,\n          width: column.width,\n          align: column.align,\n          key: 'data.' + column.key, // data.key才是真实数据\n          render: ctx => {\n            const { val, row } = ctx\n\n            const params = {\n              val,\n              v: val,\n              node: row,\n              row: row.data,\n              index: row.index,\n              indexes: [...row.indexes]\n            }\n\n            // 禁用或者行状态为view（mode为非direct）时显示column.render或者slotView插槽的内容或者key的取值\n            if (disabled || (row.status === 'view' && mode !== 'direct')) {\n              if (column.render) {\n                const ret = column.render(params)\n                if (ret instanceof Object) {\n                  return isVNode(ret) ? ret : String(ret)\n                }\n                return ret\n              }\n              const viewSlot = slots[column.key + ':view']\n              return viewSlot?.(params) ?? String(val ?? '')\n            }\n\n            return slots[column.key]?.(params) ?? String(val ?? '')\n          },\n          summary:\n            summary === true\n              ? summary\n              : summary\n              ? ({ total, key, data }) =>\n                  summary({\n                    total,\n                    key,\n                    data,\n                    origin: props.data || []\n                  })\n              : undefined\n        }\n      })\n\n    const handleClass = ns.e('sort-handle')\n    const sortableColumn: TableColumn<MultipleFormRow>[] = sortable.value\n      ? [\n          {\n            name: '排序',\n            key: '$_sort',\n            align: 'center',\n            fixed: 'left',\n            width: 60,\n            render: () => (\n              <ElIcon class={handleClass}>\n                <Rank />\n              </ElIcon>\n            )\n          }\n        ]\n      : []\n\n    return [\n      ...sortableColumn,\n      indexColumn,\n      ...(disabled ? tableColumns : tableColumns.concat(actionColumn))\n    ]\n  })\n\n  return {\n    cols,\n    handleCreate\n  }\n}\n"],"names":["useColumns","options","props","errorTips","slots","ns","root","tableRef","emit","delRow","open","validate","insertTo","emitChange","sortable","computed","tree","exchange","arr","oIndex","nIndex","slice","sort","value","stopSort","tbody","tableDom","getElementsByClassName","sortInstance","Sortable","animation","ghostClass","handle","onSort","e","oldIndex","newIndex","undefined","children","destroy","watch","s","nextTick","onMounted","onBeforeUnmount","currentEditRow","data","mode","resetCurrentRow","saved","indexes","status","dialogVisible","inject","dialogInjectionKey","makeRowOriginalData","columns","reduce","acc","cur","defaultValue","Function","key","createInlineEditingRow","parent","index","length","createDirectEditingRow","handleCreate","title","ctx","handleInsert","row","handleSave","valid","stopped","saveMethod","loading","result","rows","map","item","type","Promise","asyncResult","finally","prevData","handleClose","Object","assign","handleEdit","handleDelete","deleteMethod","handleCreateChild","childIndex","actionVisible","isRowChecked","checked","some","getAllChildrenData","forEach","child","push","getAllNodesFlat","handleRowCheck","newChecked","allChildrenData","filter","findIndex","splice","isAllChecked","allNodes","every","isIndeterminate","checkedCount","handleCheckAll","cols","disabled","actionEdit","actionDelete","actionInsert","actionColumn","fixed","align","width","actionWidth","name","render","buttons","_createVNode","ElButton","Select","onClick","Close","Edit","maxDepth","depth","AddChild","Insert","Delete","actionSlotName","actionSlots","_Fragment","renderIndexIndent","checkbox","indent","_createTextVNode","indexColumnRender","checkable","ElCheckbox","verticalAlign","margin","indexColumn","tableColumns","column","visible","errTip","required","rules","content","ElTooltip","default","is","tip","tips","ElIcon","InfoFilled","summary","val","params","v","node","ret","isVNode","String","viewSlot","total","origin","handleClass","sortableColumn","Rank","concat"],"mappings":"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"}