{"version":3,"file":"powerful-table-data.mjs","sources":["../../../packages/powerful-table/src/powerful-table-data.ts"],"sourcesContent":["import { ElMessage, ElMessageBox, useGlobalConfig } from 'element-plus/es'\nimport { deepClone, isTypeProtect } from '../../index'\nimport { PowerfulTableSymbol } from '../../keys'\nimport type { ElTable } from 'element-plus/es'\nimport type { FDatePicker, FInput, FSelect } from '../../filter'\nimport type { PropType } from 'vue'\nimport type {\n  ComponentEvent,\n  EmitEventType,\n  EmitType,\n  EventType,\n  InjectProps,\n  PowerfulTableData,\n  PowerfulTableHeader,\n  PowerfulTableHeaderProps,\n  PowerfulTableProps,\n  PowerfulTableStatesReturn,\n  SetDataType,\n  StateData,\n} from '~/index'\nimport { LangKey, t } from '~/locale/lang'\n// console.log(PTFDatePicker, PTFInput, PTFSelect)\n\nexport enum EmitEnum {\n  BtnPlusChange = 'btn-plus-change',\n  BtnPlusRefresh = 'btn-plus-refresh',\n  BtnClick = 'btn-click',\n  SizeChange = 'size-change',\n  ComponentEvent = 'component-event',\n  SortCustom = 'sort-custom',\n  BatchOperate = 'batch-operate',\n  Select = 'select',\n  SelectionChange = 'selection-change',\n  SelectAll = 'select-all',\n  CellMouseEnter = 'cell-mouse-enter',\n  CellMouseLeave = 'cell-mouse-leave',\n  CellClick = 'cell-click',\n  CellDblclick = 'cell-dblclick',\n  CellContextmenu = 'cell-contextmenu',\n  RowClick = 'row-click',\n  RowContextmenu = 'row-contextmenu',\n  RowDblclick = 'row-dblclick',\n  HeaderClick = 'header-click',\n  HeaderContextmenu = 'header-contextmenu',\n  FilterChange = 'filter-change',\n  CurrentChange = 'current-change',\n  HeaderDragend = 'header-dragend',\n  ExpandChange = 'expand-change',\n}\n\ntype DefaultRow = any\ntype TranslatePair = {\n  [key: string]: string | string[] | TranslatePair\n}\n\nexport type FilterComponents = import('vue').Ref<\n  InstanceType<typeof FSelect | typeof FInput | typeof FDatePicker>[] | null\n>\n\n// 主组件props\nexport const powerfulTableProps = {\n  // 按钮组件配置数据\n  btnConfig: {\n    type: Object as PropType<PowerfulTableProps<DefaultRow>['btnConfig']>,\n    default: undefined,\n  },\n  // 组件大小\n  size: {\n    type: String as PropType<PowerfulTableProps<DefaultRow>['size']>,\n    default: '',\n    validator: (val: string) => ['', 'default', 'small', 'large'].includes(val),\n  },\n  // 当前数据\n  list: {\n    type: Array as PropType<PowerfulTableProps<DefaultRow>['list']>,\n    default: () => [],\n  },\n  // 所有选中\n  selectData: {\n    type: Array as PropType<PowerfulTableProps<DefaultRow>['list']>,\n    default: () => {\n      return []\n    },\n  },\n  isSelect: {\n    type: Boolean as PropType<PowerfulTableProps<DefaultRow>['isSelect']>,\n    default: false,\n  },\n  selectable: {\n    type: Function as PropType<PowerfulTableProps<DefaultRow>['selectable']>,\n    default: undefined,\n  },\n  selectCompare: {\n    type: Array as PropType<PowerfulTableProps<DefaultRow>['selectCompare']>,\n    default: () => ['id', 'id'],\n  },\n\n  header: {\n    type: Array as PropType<PowerfulTableProps<DefaultRow>['header']>,\n    default: () => [],\n  },\n\n  paginationProperty: {\n    type: Object as PropType<\n      PowerfulTableProps<DefaultRow>['paginationProperty']\n    >,\n    default: () => ({}),\n  },\n\n  // 批量操作\n  operateData: {\n    type: Object as PropType<PowerfulTableProps<DefaultRow>['operateData']>,\n    default: () => [{}],\n  },\n  isPagination: {\n    type: Boolean,\n    default: true,\n  },\n  tree: {\n    type: Object as PropType<PowerfulTableProps<DefaultRow>['tree']>,\n    default: () => ({\n      props: {\n        children: 'children',\n        hasChildren: 'hasChildren',\n      },\n    }),\n  },\n  property: {\n    type: Object as PropType<PowerfulTableProps<DefaultRow>['property']>,\n    default: () => ({}),\n  },\n\n  listRequest: {\n    type: Object as PropType<PowerfulTableProps<DefaultRow>['listRequest']>,\n    default: undefined,\n  },\n}\n\nexport const powerfulTableComponentProp = {\n  row: {\n    type: Object as PropType<DefaultRow>,\n    default: () => [{}],\n  },\n  index: {\n    type: Number as PropType<number>,\n  },\n  aligning: {\n    type: String as PropType<'left' | 'center' | 'right'>,\n    default: 'center',\n  },\n}\n\n// 对部分支持函数的 property 参数进行判断返回\nexport const isProperty = <T, R>(e: T, property?: R | ((e: T) => R)) => {\n  return isTypeProtect<typeof property, R>(\n    property,\n    (pet) => typeof (<R>pet) != 'function'\n  )\n    ? property\n    : property!(e || ({ row: {}, index: undefined, props: {} } as T))\n}\n\n// 附属组件自定义事件抛出\nexport const useREmit = <T extends EventType>(\n  emit: (s: 'component-emit', event: ComponentEvent, ...arg: any) => void,\n  componentName: EventType | 'filter',\n  props: {\n    row: any\n    index: number\n    props: PowerfulTableHeaderProps\n  }\n) => {\n  const REmit = (eventType: string, ...arg: any) => {\n    emit(\n      'component-emit',\n      {\n        componentName,\n        eventType,\n        ...props,\n      },\n      ...arg\n    )\n  }\n\n  const event = (\n    eventType: keyof NonNullable<SetDataType<T>['on']>,\n    ...arg: any\n  ) => {\n    const data = props.props.data as SetDataType<EventType>\n    if (\n      isTypeProtect<SetDataType<EventType>, SetDataType<EventType>>(\n        data as SetDataType<EventType>,\n        (data) => typeof data?.on != undefined\n      )\n    ) {\n      ;(data?.on as { [key: string]: any })?.[eventType as string](\n        { ...props },\n        ...arg\n      )\n    }\n  }\n\n  return {\n    REmit,\n    event,\n  }\n}\n\nexport const usePowerfulTableStates = <L>(\n  props: PowerfulTableProps<L>\n): PowerfulTableStatesReturn<L> => {\n  // 全局此组件注入的数据\n  const injectProps = inject(PowerfulTableSymbol, {})\n\n  /* ----- 组件实例 ----- */\n  const multipleTable = ref<InstanceType<typeof ElTable> | null>(null)\n  const filterComponents: FilterComponents = ref(null)\n\n  /* ------  表格数据  ------ */\n  const powerfulTableData: PowerfulTableData<L> = reactive({\n    listLoading: true, //页面是否加载中\n    develop: [], // 展开\n    currentPage: 1, // 当前页\n    pageSize: props.paginationProperty?.pageSizes\n      ? props.paginationProperty?.pageSizes[0]\n      : 10, //一页多少条\n    currentSelect: [], // 当前页选中\n    otherSelect: [], // 其他页选中\n    // 存储 watch 返回\n    watchCache: [],\n    operate: {\n      // 承载props的operateData\n      value: undefined,\n      disabled: false,\n      icon: '',\n      prop: 'id',\n      style: undefined,\n      operates: [],\n    },\n\n    total: props.paginationProperty?.total || 0,\n  })\n\n  // 组件参数\n  const stateData: StateData<L> = reactive({\n    tableLists: [],\n    isPC: true,\n    isTable: true,\n  })\n\n  // 为表格数据重新赋值。listApi 存在时 tableLists 由 useInitiateListRequest 函数中处理\n  if (typeof props.listRequest?.listApi !== 'function') {\n    powerfulTableData.watchCache.push(\n      watch(\n        () => props.list as L[],\n        (newList) => {\n          stateData.tableLists = newList || []\n        },\n        { immediate: true, deep: true }\n      )\n    )\n  }\n\n  onBeforeUnmount(() => {\n    // 清除监听事件\n    powerfulTableData.watchCache.forEach((item) => item())\n  })\n\n  return {\n    Size: props.size || useGlobalConfig()?.value?.size || 'default',\n    multipleTable,\n    filterComponents,\n    powerfulTableData,\n    injectProps,\n    stateData,\n  }\n}\n\nexport const useFunction = <L>(\n  emit: EmitEventType<L>,\n  powerfulTableData: PowerfulTableData<L>\n) => {\n  const { proxy } = getCurrentInstance() as any\n\n  /**\n   * 排序方法\n   * @param obj https://element-plus.gitee.io/zh-CN/component/table.html#table-%E4%BA%8B%E4%BB%B6 sort-change事件\n   */\n  const sortChange = (obj: { column: any; prop: string; order: string }) => {\n    if (Object.keys(obj.column || {}).length) {\n      if (obj.column.sortable == 'custom') {\n        emit(EmitEnum.SortCustom, obj)\n      }\n    }\n  }\n\n  /**\n   * 批量按钮\n   * @returns\n   */\n  const batchOperate = () => {\n    // console.log(powerfulTableData.operate)\n    if (\n      (powerfulTableData.operate == undefined ||\n        powerfulTableData.operate == null) &&\n      powerfulTableData.operate !== 0\n    ) {\n      ElMessage.warning(t(LangKey.SelectOperateType))\n      return\n    }\n\n    if (powerfulTableData.currentSelect.length == 0) {\n      ElMessage.warning(t(LangKey.SelectOperateData))\n      return\n    }\n    const currentItem = powerfulTableData.operate.operates.find(\n      (item) => item.value == powerfulTableData.operate.value\n    )\n\n    ElMessageBox.confirm(\n      t<(s: string) => string>(LangKey.BatchOperate)(currentItem!.label),\n      t(LangKey.Hint),\n      {\n        confirmButtonText: t(LangKey.Confirm),\n        cancelButtonText: t(LangKey.Cancel),\n        type: 'warning',\n      }\n    )\n      .then(() => {\n        const ids = powerfulTableData.otherSelect\n          .concat(powerfulTableData.currentSelect)\n          .map((item) => {\n            return (item as { [s: string]: string })[\n              powerfulTableData.operate.prop || 'id'\n            ]\n          })\n        const rows = powerfulTableData.otherSelect\n          .concat(powerfulTableData.currentSelect)\n          .map((item) => item)\n\n        emit(EmitEnum.BatchOperate, {\n          ids,\n          item: currentItem,\n          rows,\n        })\n      })\n      .catch(() => {\n        // console.log('取消批量操作')\n      })\n  }\n\n  const returnEmit = (emitName: Extract<EmitType, 'btn-click'>, arg: any) => {\n    switch (emitName) {\n      case 'btn-click':\n        emit(EmitEnum.BtnClick, arg)\n        break\n    }\n  }\n\n  /**\n   * 将附属组件（components/src 目录下的文件）中el的事件抛出\n   */\n  const componentEmit = (e: ComponentEvent, ...arg: any) => {\n    emit(EmitEnum.ComponentEvent, e, ...arg)\n  }\n\n  /* ------ 回调到组件上 ------ */\n  const get = () => {\n    const params = {\n      pageNum: powerfulTableData.currentPage,\n      pageSize: powerfulTableData.pageSize,\n    }\n\n    try {\n      // 如果父组件是getList方法 无需自定义事件\n      proxy.$parent._getList({\n        params,\n        select: powerfulTableData.otherSelect.concat(\n          powerfulTableData.currentSelect\n        ),\n      })\n    } catch {\n      emit(EmitEnum.SizeChange, {\n        params,\n        select: powerfulTableData.otherSelect.concat(\n          powerfulTableData.currentSelect\n        ),\n      })\n    }\n  }\n\n  /**\n   * 添加选中\n   * @param e\n   */\n  const handleSelectionChange = (e: L[]) => {\n    powerfulTableData.currentSelect = deepClone(e)\n    emit(EmitEnum.SelectionChange, e)\n  }\n\n  /**\n   * 匹配组件\n   * @param {string} type 类型\n   * @returns 组件名称\n   */\n  const matchComponents = (type: string) => {\n    return {\n      image: 'PTImage',\n      btn: 'PTButton',\n      switch: 'PTSwitch',\n      input: 'PTInput',\n      textarea: 'PTInput',\n      iconfont: 'PTIcon',\n      tag: 'PTTags',\n      rate: 'PTRate',\n      href: 'PTLink',\n      video: 'PTVideo',\n    }[type]\n  }\n\n  return {\n    handleSelectionChange,\n    returnEmit,\n    componentEmit,\n    sortChange,\n    batchOperate,\n    get,\n    matchComponents,\n    bindAttr(\n      prop: PowerfulTableHeaderProps<L>,\n      scope: { $index: number; row: L },\n      item: PowerfulTableHeader<L>\n    ): {\n      row: L\n      index: number\n      prop: PowerfulTableHeaderProps<L>\n      aligning: 'left' | 'center' | 'right'\n    } {\n      return {\n        row: scope.row,\n        index: scope.$index,\n        prop,\n        aligning:\n          (item.property?.align as 'left' | 'right' | 'center') ||\n          item.headerAlign ||\n          'center',\n      }\n    },\n  }\n}\n\nexport const useInitiateListRequest = <L>(\n  powerfulTableData: PowerfulTableData<L>,\n  props: PowerfulTableProps<L>,\n  injectProps: InjectProps,\n  stateData: StateData<L>\n) => {\n  const resolution = (data: object, key: string) => {\n    const keys = key.split('.')\n    let rtn: { [s: string]: any } = data\n    keys.forEach((key) => {\n      rtn = rtn[key]\n    })\n\n    return rtn\n  }\n  // 重置列表，将pageNo 改为 1，其余条件不变\n  let resetList: (params?: object) => void\n\n  // 发起请求\n  let getListData: (params?: object) => void\n\n  if (typeof props.listRequest?.listApi === 'function') {\n    getListData = (params: object = {}) => {\n      // 获取 key 值\n      const [pageNoKey, pageSizeKey, responseKey, totalKey, listsKey] = [\n        props.listRequest?.pageNoKey ||\n          injectProps.listRequest?.pageNoKey ||\n          'pageNo',\n        props.listRequest?.pageSizeKey ||\n          injectProps.listRequest?.pageSizeKey ||\n          'pageSize',\n        typeof props.listRequest?.responseKey === 'undefined'\n          ? typeof injectProps.listRequest?.responseKey === 'undefined'\n            ? 'data.result'\n            : injectProps.listRequest?.responseKey\n          : props.listRequest?.responseKey,\n        props.listRequest?.totalKey ||\n          injectProps.listRequest?.totalKey ||\n          'total',\n        props.listRequest?.listsKey ||\n          injectProps.listRequest?.listsKey ||\n          'rows',\n      ]\n\n      props.listRequest\n        ?.listApi({\n          ...(props.listRequest.listQuery || {}),\n          ...params,\n          [pageNoKey]: powerfulTableData.currentPage,\n          [pageSizeKey]: powerfulTableData.pageSize,\n        })\n        .then((res: any) => {\n          const response = responseKey ? resolution(res, responseKey) : res\n          stateData.tableLists = response[listsKey]\n          powerfulTableData.total = Number(response[totalKey])\n        })\n    }\n\n    resetList = (params: object = {}) => {\n      powerfulTableData.currentPage = 1\n\n      getListData(params)\n    }\n\n    getListData()\n\n    return {\n      resetList,\n      getListData,\n    }\n  }\n\n  return {\n    resetList: undefined,\n    getListData: undefined,\n  }\n}\n\nexport type { StateData, PowerfulTableData, PowerfulTableProps, TranslatePair }\n"],"names":["useGlobalConfig","ElMessage","ElMessageBox","isTypeProtect","deepClone","PowerfulTableSymbol","t","inject","ref","reactive","watch","onBeforeUnmount","getCurrentInstance","LangKey","EmitEnum","powerfulTableProps","val","powerfulTableComponentProp","isProperty","property","pet","useREmit","emit","componentName","props","eventType","arg","_a","data","usePowerfulTableStates","_b","_c","_d","_e","_f","injectProps","multipleTable","filterComponents","powerfulTableData","stateData","newList","item","useFunction","proxy","e","emitName","obj","currentItem","ids","rows","params","type","prop","scope","useInitiateListRequest","resolution","key","keys","rtn","resetList","getListData","_g","_h","_i","_j","_k","_l","_m","pageNoKey","pageSizeKey","responseKey","totalKey","listsKey","res","response"],"mappings":"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"}