{"version":3,"file":"use-search-list-page.mjs","sources":["../../../../../../packages/components/search-list-page/src/use-search-list-page.ts"],"sourcesContent":["import { ref, onMounted, computed, useTemplateRef, nextTick } from 'vue'\nimport type { SetupContext } from 'vue'\nimport type { SearchListPageProps, SearchListPageEmits } from './search-list-page'\nimport type { ButtonsProps, ButtonProps } from '@el-plus/components/buttons'\nimport type { FormInstance } from '@el-plus/components/form'\nimport type { TableInstance } from '@el-plus/components/table'\nimport type { FormItemProp } from 'element-plus'\nimport { mergeListByKey } from '@el-plus/utils'\nimport { useLocale } from '@el-plus/hooks/use-locale'\n\nconst getAvailableHeight = (el: HTMLElement): number => {\n  const elRect = el.getBoundingClientRect()\n  let parent = el.parentElement\n  while (parent) {\n    const style = getComputedStyle(parent)\n    const height = style.height\n    if (height && height !== 'auto' && !height.endsWith('%')) {\n      const parentRect = parent.getBoundingClientRect()\n      const paddingBottom = parseFloat(style.paddingBottom) || 0\n      return parentRect.bottom - elRect.top - paddingBottom\n    }\n    if (parent === document.documentElement || parent === document.body) {\n      break\n    }\n    parent = parent.parentElement\n  }\n  return window.innerHeight - elRect.top\n}\n\nexport const useSearchListPage = (\n  props: SearchListPageProps,\n  config = {},\n  emit?: SetupContext<SearchListPageEmits>['emit'],\n) => {\n  const rootRef = useTemplateRef<HTMLDivElement>('rootRef')\n  const topRef = useTemplateRef<HTMLDivElement>('topRef')\n  const middleRef = useTemplateRef<HTMLDivElement>('middleRef')\n  const { calcTableHeight, tableProps, tableRef } = useTable(props, config, rootRef, topRef, middleRef)\n  const { formProps, validate, resetFields, formRef } = useForm(props, {\n    calcTableHeight,\n  })\n  const { buttonsProps, searchButtons, search, reset } = useButtons(props, {\n    validate,\n    resetFields,\n    tableRef,\n    emit,\n  })\n  return {\n    formProps,\n    tableProps,\n    buttonsProps,\n    searchButtons,\n    search,\n    reset,\n    tableRef,\n    formRef,\n    beforeSearch: async () => {\n      if (!formRef.value) {\n        await nextTick()\n      }\n      await validate()\n    }\n  }\n}\nconst useTable = (props: SearchListPageProps, config, rootRef: ReturnType<typeof useTemplateRef<HTMLDivElement>>, topRef: ReturnType<typeof useTemplateRef<HTMLDivElement>>, middleRef: ReturnType<typeof useTemplateRef<HTMLDivElement>>) => {\n  const instanceName = 'tableRef'\n  const tableRef = useTemplateRef<TableInstance>(instanceName)\n  const tableHeight = ref(0)\n  const tableProps = computed(() => {\n    return {\n      ref: instanceName,\n      columns: props.columns,\n      showPagination: true,\n      height: tableHeight.value,\n      showIndexCol: props.showIndexCol,\n      showSelectionCol: props.showSelectionCol,\n      showSingleSelectionCol: props.showSingleSelectionCol,\n      actionButtons: props.actionButtons,\n      formatColumns: props.formatColumns,\n      api: props.api,\n      reqAfter: props.reqAfter,\n      reqBefore: props.reqBefore,\n      reqData: props.formData,\n      customColumnModule: props.customColumnModule,\n      customColumnApi: props.customColumnApi,\n      customColumnSaveApi: props.customColumnSaveApi,\n      minWidth: props.minWidth,\n      actionColWidth: props.actionColWidth,\n      ...props.tableProps,\n    }\n  })\n  const calcTableHeight = () => {\n    setTimeout(() => {\n      const topHeight = topRef.value?.offsetHeight ?? 0\n      const middleHeight = middleRef.value?.offsetHeight ?? 0\n      let paginationHeight = 0\n      if (tableProps.value.showPagination) {\n        const paginationEl = rootRef.value?.querySelector('.el-pagination') as HTMLElement | null\n        paginationHeight = paginationEl ? paginationEl.offsetHeight + 12 : 0\n      }\n      const containerHeight = rootRef.value\n        ? getAvailableHeight(rootRef.value)\n        : window.innerHeight\n\n      tableHeight.value =\n        containerHeight -\n        topHeight -\n        middleHeight -\n        paginationHeight -\n        props.offsetTop!\n    }, 0)\n  }\n\n  onMounted(calcTableHeight)\n  return {\n    tableRef,\n    tableProps,\n    calcTableHeight,\n  }\n}\nconst useForm = (props: SearchListPageProps, { calcTableHeight }) => {\n  const instanceName = 'formRef'\n  const formRef = useTemplateRef<FormInstance>(instanceName)\n  const formProps = computed(() => {\n    return {\n      ref: instanceName,\n      formItemList: props.formItemList,\n      isShowFold: true,\n      modelValue: props.formData,\n      ...props.formProps,\n      onToggleStatus: () => {\n        calcTableHeight()\n      },\n    }\n  })\n  // 校验\n  const validate = () => {\n    return formRef.value!.validate()\n  }\n  // 重置校验\n  const resetFields = (props: FormItemProp) => {\n    return formRef.value!.resetFields(props)\n  }\n  // 清理某个字段的表单验证信息\n  const clearValidate = (props: FormItemProp) => {\n    return formRef.value!.clearValidate(props)\n  }\n  return {\n    formProps,\n    formRef,\n    validate,\n    resetFields,\n    clearValidate,\n  }\n}\nconst useButtons = (\n  props: SearchListPageProps,\n  { validate, resetFields, tableRef, emit },\n) => {\n  const { t } = useLocale()\n  const defaultButtons: ButtonProps<any[]>[] = [\n    {\n      name: t('ep.searchListPage.add'),\n      prop: 'add',\n      permission: props.name ? `${props.name}:ADD` : '',\n      show: () => {\n        return !!props.add || !!props.leftButtons?.some((item) => item.prop === 'add')\n      },\n      type: 'primary',\n      onClick: () => {\n        props.add?.()\n      },\n    },\n    // {\n    //   name: t('ep.searchListPage.templateDownload'),\n    //   prop: 'templateDownload',\n    //   permission: props.name ? `${props.name}:TEMPLATEDOWNLOAD` : '',\n    //   show: !!props.templateDownloadApi,\n    // },\n    // {\n    //   name: t('ep.searchListPage.import'),\n    //   prop: 'import',\n    //   permission: props.name ? `${props.name}:IMPORT` : '',\n    //   show: !!props.importApi,\n    // },\n    // {\n    //   name: t('ep.searchListPage.export'),\n    //   prop: 'export',\n    //   permission: props.name ? `${props.name}:EXPORT` : '',\n    //   show: !!props.exportApi,\n    // },\n  ]\n  const list = mergeListByKey(defaultButtons, props.leftButtons)\n  if (props.customColumnModule) {\n    list.push({\n      name: t('ep.customColumn.columnSettings'),\n      prop: 'customColumn',\n      type: 'primary',\n      onClick: () => {\n        tableRef.value.openCustomColumnDialog()\n      },\n    })\n  }\n  list.forEach((item: ButtonProps<any[]>) => {\n    if (item.onClick) {\n      const clickFn = item.onClick\n      item.onClick = () => {\n        const rows = tableRef.value.elTableRef.getSelectionRows()\n        clickFn(rows)\n      }\n    }\n    if (item.confirmBefore) {\n      const confirmBeforeFn = item.confirmBefore\n      item.confirmBefore = async () => {\n        const rows = tableRef.value.elTableRef.getSelectionRows()\n        await confirmBeforeFn(rows)\n      }\n    }\n  })\n\n  const buttonsProps = computed(() => {\n    return {\n      list,\n      ...props.buttonsProps,\n    }\n  })\n  // 搜索\n  const search = async (isInitSearch = false) => {\n    // await validate()\n    // 如果isInitSearch为true+reserveSelection为true，清空选中状态\n    if (isInitSearch && props.tableProps?.reserveSelection) {\n      tableRef.value.elTableRef.clearSelection()\n    }\n    tableRef.value.search(isInitSearch)\n  }\n  // 清空\n  const reset = async () => {\n    // 清空前钩子，返回 false 阻止清空\n    if (props.clearBefore && props.clearBefore() === false) return\n    resetFields()\n    search(true)\n    emit?.('clear')\n  }\n  const searchButtons: ButtonsProps['list'] = [\n    {\n      name: t('ep.searchListPage.search'),\n      type: 'primary',\n      onClick: search.bind(null, true),\n    },\n    {\n      name: t('ep.searchListPage.clear'),\n      onClick: reset,\n    },\n  ]\n  return {\n    buttonsProps,\n    searchButtons,\n    search,\n    reset,\n  }\n}\n"],"names":["props"],"mappings":"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"}