{"version":3,"file":"table.mjs","sources":["../../../../../../packages/components/table/src/table.vue"],"sourcesContent":["<script setup lang=\"ts\">\n// #region init\nimport { type Component, computed, onMounted, ref, useSlots } from 'vue'\nimport { get } from 'lodash-unified'\nimport {\n  ElButton,\n  type ElDialog,\n  ElDropdown,\n  ElDropdownItem,\n  ElDropdownMenu,\n  ElForm,\n  ElIcon,\n  ElMessage,\n  ElPagination,\n  ElPopover,\n  ElSkeleton,\n  ElTable,\n  ElTableColumn,\n  ElTree,\n} from 'element-plus'\nimport {\n  ArrowDown,\n  Grid,\n  Plus,\n  Refresh,\n  RefreshLeft,\n  Search,\n  Setting,\n} from '@element-plus/icons-vue'\nimport { useHint } from '@yhui/utils'\nimport { type IConfirmParam, YhDialog } from '../../dialog'\nimport { type Page } from '../../types'\nimport { SettingData, actionsColumnProp } from './setting'\nimport type { EntityBase } from '../../types'\nimport type { VNode } from 'vue'\n\ndefineOptions({\n  name: 'YhTable',\n})\n\nconst emit = defineEmits<{\n  (e: 'update:pageParam', p: typeof props['pageParam'])\n  (e: 'update:searchParam', p: typeof props['searchParam'])\n  (e: 'update:tableData', p: typeof props['tableData'])\n  (e: 'confirm', p: Required<IConfirmParam<any>>)\n}>()\n\nconst props = withDefaults(\n  defineProps<{\n    actionsColumnProps?: InstanceType<typeof ElTableColumn>['$props']\n    api?: {\n      del?: () => Promise<any>\n    }\n    components?: {\n      View?: Component\n      Edit?: Component\n    }\n    dialogProps?: InstanceType<typeof ElDialog>['$props']\n    // eslint-disable-next-line vue/prop-name-casing\n    EntityClass?: typeof EntityBase\n    hideList?: HideOptions[]\n    /**\n     * @description 组件id，用于存储配置，如列顺序\n     */\n    id: string\n    /** 增删改查跳转新页面需要传递 */\n    router?: { push: (...args: any) => any }\n    pages?: {\n      /** RouteRecordRaw['name'] */\n      view?: string\n      /** RouteRecordRaw['name'] */\n      add?: string\n      /** RouteRecordRaw['name'] */\n      edit?: string\n    }\n    pageParam?: Required<Page>\n    pageProps?: InstanceType<typeof ElPagination>['$props']\n    permissions?: permission\n    permissionValidate?: (name?: string) => boolean\n    search?: (param: Required<Page>, fromPage?: boolean) => Promise<any>\n    searchDefault?: () => Record<string, any>\n    searchFormProps?: InstanceType<typeof ElForm>['$props']\n    searchParam?: Record<string, any>\n    searchResultKey?: string\n    searchResultTotalKey?: string\n    searchSetting?: Partial<{\n      searchIcon: Component | undefined\n      searchText: string\n      resetIcon: Component | undefined\n      resetText: string\n    }>\n    settingStorageKey?: string\n    tableData?: any\n    tableProps?: InstanceType<typeof ElTable>['$props']\n    /** 不折叠操作按钮 */\n    unfoldActions?: boolean\n  }>(),\n  {\n    hideList: () => [],\n    id: () => `table-only-one`,\n    pageParam: () => ({ page: 1, size: 10, total: 0 }),\n    permissionValidate: () => true,\n    searchDefault: () => ({}),\n    searchParam: () => ({}),\n    searchResultKey: 'data.data.list',\n    searchResultTotalKey: 'data.data.total',\n  }\n)\n\n// search table page action searchButtons\nconst slots = useSlots()\n\ntype permission = { add?: string; edit?: string; del?: string }\ntype HideOptions =\n  | 'search'\n  | 'page'\n  | 'searchButton'\n  | 'resetButton'\n  | 'addButton'\n  | 'viewButton'\n  | 'editButton'\n  | 'deleteButton'\n  | 'settingButton'\n  | 'actionsColumn'\n  | 'searching'\n  | 'setting'\n\nif (props.settingStorageKey) SettingData.key = props.settingStorageKey\n\nconst tableRef = ref()\nfunction isShow(name: HideOptions) {\n  return !props.hideList?.includes(name)\n}\nfunction isSpecialType(type) {\n  return ['selection', 'index'].includes(type)\n}\n// #endregion init\n\n// #region search\nconst searchFormRef = ref()\nconst defaultSearchSetting = {\n  searchIcon: Search,\n  searchText: '查询',\n  resetIcon: Refresh,\n  resetText: '重置',\n}\nconst combinedSearchingSetting = {\n  ...defaultSearchSetting,\n  ...props.searchSetting,\n}\n/* fill search item to adjust width */\nconst refSearch = ref<HTMLElement>()\nconst completeSearchItem = () => {\n  const length = refSearch.value?.children?.length || 0\n  const needAdd = length % 3\n  for (let i = 0; i < 3 - needAdd; i++) {\n    refSearch.value?.appendChild(document.createElement('div'))\n  }\n}\n/* search and pagination */\nconst isSearching = ref(false)\n\nconst doSearch = async () => {\n  isSearching.value = true\n  try {\n    const res = await props.search?.(props.pageParam, true)\n    let list = get(res, props.searchResultKey)\n    const total = get(res, props.searchResultTotalKey)\n    if (props.EntityClass) list = list.map((it) => new props.EntityClass!(it))\n    emit('update:tableData', list)\n    if (isShow('searchButton')) {\n      emit('update:pageParam', {\n        ...props.pageParam,\n        total,\n      })\n    }\n  } catch (error) {\n    console.log(error)\n    isSearching.value = false\n  }\n  isSearching.value = false\n}\nconst handleSizeChange = (size: number) => {\n  emit('update:pageParam', { ...props.pageParam, page: 1, size })\n  doSearch()\n}\nconst handleCurrentChange = (page: number) => {\n  emit('update:pageParam', { ...props.pageParam, page })\n  doSearch()\n}\nconst handleClickSearch = () => {\n  emit('update:pageParam', { ...props.pageParam, page: 1 })\n  doSearch()\n}\nconst resetSearch = () => {\n  emit('update:searchParam', props.searchDefault())\n  doSearch()\n}\n// #endregion search\n\n// #region setting\nconst slotItems4table = computed<VNode[]>(() => slots?.table?.() || [])\nconst settingData = ref(initSettingData())\nconst settingButtonRef = ref<InstanceType<typeof ElButton>>()\nconst settingPopoverRef = ref<InstanceType<typeof ElPopover>>()\nconst treeRef = ref<InstanceType<typeof ElTree>>()\nconst isSettingPopoverVisible = ref(false)\n\nfunction initSettingData() {\n  const id = props.id\n  const slotItems = slotItems4table.value\n  const setting = SettingData.getInstance({ id, slotItems })\n  setting.watch()\n  return setting\n}\nconst tableChildren = computed(() => {\n  if (!settingData.value) return\n  const propsInSetting = settingData.value?.columns.map((column) => column.prop)\n  const res = settingData.value.purifiedSlotItems\n    .filter((it) => {\n      if (!propsInSetting) return true\n      const isInSettings = propsInSetting.includes(it.props?.prop)\n      const isActions = it.props?.prop === actionsColumnProp\n      const isChecked = settingData.value?.columns.find(\n        (column) => column.prop === it.props?.prop\n      )?.checked\n      return isInSettings && !isActions && isChecked\n    })\n    .sort(\n      (a, b) =>\n        settingData.value!.columns.findIndex(\n          (it) => it.prop === a.props?.prop\n        ) -\n        settingData.value!.columns.findIndex((it) => it.prop === b.props?.prop)\n    )\n  return res\n})\n\nconst hideSettings = () => {\n  settingPopoverRef?.value?.popperRef?.['delayHide']?.()\n}\nfunction isAllowDrag(data) {\n  if (isSpecialType(data.type)) return false\n  return true\n}\nfunction allowDrag(node) {\n  return isAllowDrag(node.data)\n}\nfunction allowDrop(draggingNode, dropNode, type) {\n  if (type === 'inner') return false\n  if (isSpecialType(dropNode.data.type)) return false\n  return true\n}\n\nfunction clearStorage() {\n  useHint('确认恢复默认设置？', async () => {\n    settingData.value.clear()\n    ElMessage.success('已恢复默认设置')\n  })\n}\n\n// #endregion setting\n\n// #region table\nconst actions = [\n  { key: 'view', component: props?.components?.View, text: '查看' },\n  { key: 'edit', component: props?.components?.Edit, text: '编辑' },\n  { key: 'new', component: props?.components?.Edit, text: '新增' },\n]\ntype actionType = 'view' | 'edit' | 'add'\nconst action = ref<IConfirmParam<any>['from']>('view')\nconst actionText = computed(\n  () => actions.find((it) => it.key === action.value)?.text\n)\nconst actionRow = ref()\nconst isShowDetailDialog = ref(false)\nconst showDetailDialog = (type: actionType) => {\n  if (props.components) {\n    isShowDetailDialog.value = true\n  } else if (props.pages) {\n    if (typeof props.router?.push !== 'function') return\n    // eslint-disable-next-line vue/no-mutating-props\n    props.router.push({\n      name: props.pages[type],\n      params: type !== 'add' ? { id: actionRow.value.id } : undefined,\n    })\n  } else {\n    throw new Error('action pages or components needed')\n  }\n}\nconst viewRow = (row) => {\n  action.value = 'view'\n  actionRow.value = row\n  showDetailDialog('view')\n}\nconst add = () => {\n  action.value = 'new'\n  actionRow.value = props.EntityClass ? new props.EntityClass() : {}\n  showDetailDialog('add')\n}\nconst onClickMenuItem = ({\n  row,\n  command,\n}: {\n  row: any\n  command: IConfirmParam<any>['from']\n}) => {\n  action.value = typeof command === 'string' ? command : 'other'\n  actionRow.value = row\n  if (command === 'edit') {\n    showDetailDialog('edit')\n  } else if (command === 'delete') {\n    props.api?.del?.()\n  }\n}\n// #endregion table\n\n// #region dialog\nconst refContent = ref()\nconst onDialogConfirm = async (p: IConfirmParam<any>) => {\n  if (p.type === 'ok' || p.type === 'publish') {\n    try {\n      const isPass = refContent.value?.['validate']\n        ? await refContent.value?.['validate']?.()\n        : true\n      if (!isPass) {\n        p.done(false)\n        return\n      }\n    } catch (error) {\n      console.log('validate errors:', error)\n      p.done(false)\n      return\n    }\n  }\n  emit('confirm', { ...p, data: refContent.value?.detail })\n}\n// #endregion dialog\n\n// #region lifecycle\nif (props.search) {\n  doSearch()\n}\nonMounted(() => {\n  completeSearchItem()\n})\ndefineExpose({\n  actionRow,\n  doSearch,\n  tableRef,\n  searchFormRef,\n})\n// #endregion lifecycle\n\n// window['test'] = {\n//   ref,\n//   toggleIsSearching: () => (\n//     (isSearching.value = !isSearching.value), isSearching.value\n//   ),\n//   tableRef,\n//   slots,\n//   tableChildren,\n//   SettingData,\n//   settingData,\n//   isShow,\n//   props,\n//   showDialog: () => {\n//     isShowDetailDialog.value = !isShowDetailDialog.value\n//   },\n// }\n</script>\n\n<template>\n  <div class=\"yh-table\">\n    <div class=\"yh-table-container\">\n      <div v-if=\"isShow('search')\" ref=\"refSearch\" class=\"search\">\n        <ElForm\n          ref=\"searchFormRef\"\n          :model=\"searchParam\"\n          inline\n          v-bind=\"searchFormProps\"\n        >\n          <div class=\"search-form\">\n            <slot name=\"search\" />\n            <div v-if=\"isShow('resetButton')\" class=\"search-buttons\">\n              <template v-if=\"isShow('searchButton')\">\n                <ElButton\n                  type=\"primary\"\n                  :loading=\"isSearching\"\n                  :icon=\"combinedSearchingSetting.searchIcon\"\n                  @click=\"handleClickSearch\"\n                >\n                  {{ combinedSearchingSetting.searchText }}\n                </ElButton>\n                <ElButton\n                  :icon=\"combinedSearchingSetting.resetIcon\"\n                  @click=\"resetSearch\"\n                >\n                  {{ combinedSearchingSetting.resetText }}\n                </ElButton>\n              </template>\n            </div>\n            <slot name=\"searchButtons\" />\n          </div>\n        </ElForm>\n      </div>\n\n      <div class=\"table\">\n        <div class=\"actions-bar\">\n          <ElButton\n            v-if=\"isShow('addButton') && permissionValidate(permissions?.add)\"\n            type=\"primary\"\n            :icon=\"Plus\"\n            @click=\"add\"\n          >\n            新增\n          </ElButton>\n        </div>\n\n        <div\n          v-if=\"isShow('setting')\"\n          :class=\"['setting', { 'popover-visible': isSettingPopoverVisible }]\"\n        >\n          <ElPopover\n            ref=\"settingPopoverRef\"\n            v-model:visible=\"isSettingPopoverVisible\"\n            class=\"setting-popover\"\n            :virtual-ref=\"settingButtonRef\"\n            trigger=\"click\"\n            width=\"auto\"\n            placement=\"left-start\"\n            append-to-body\n          >\n            <template #reference>\n              <ElButton\n                v-if=\"\n                  isShow('settingButton') &&\n                  permissionValidate?.(permissions?.add)\n                \"\n                ref=\"settingButtonRef\"\n                class=\"setting-button\"\n                :icon=\"Setting\"\n                style=\"width: 32px\"\n                @v-click-outside=\"hideSettings\"\n              />\n            </template>\n            <ElButton size=\"small\" text @click=\"clearStorage\">\n              <ElIcon size=\"12\" style=\"margin-right: 4px\">\n                <RefreshLeft />\n              </ElIcon>\n              <span>恢复默认</span>\n            </ElButton>\n            <ElTree\n              ref=\"treeRef\"\n              class=\"yh-table-setting-tree\"\n              :allow-drag=\"allowDrag\"\n              :allow-drop=\"allowDrop\"\n              :data=\"settingData?.columns\"\n              draggable\n              default-expand-all\n              node-key=\"prop\"\n            >\n              <template #default=\"{ data }\">\n                <div class=\"yh-drag\" :class=\"{ disabled: !isAllowDrag(data) }\">\n                  <ElIcon\n                    size=\"12\"\n                    color=\"#333\"\n                    style=\"margin-right: 20px\"\n                    :style=\"{ opacity: !isAllowDrag(data) ? '0' : '1' }\"\n                  >\n                    <Grid />\n                  </ElIcon>\n                  <ElCheckbox\n                    v-model=\"data.checked\"\n                    class=\"yh-check\"\n                    :label=\"data.label\"\n                    :disabled=\"isSpecialType(data.type) || data.disabled\"\n                  />\n                </div>\n              </template>\n            </ElTree>\n          </ElPopover>\n        </div>\n\n        <ElSkeleton\n          v-show=\"isShow('searching') ? isSearching : false\"\n          :rows=\"4\"\n          animated\n        />\n        <ElTable\n          v-show=\"isShow('searching') ? !isSearching : true\"\n          ref=\"tableRef\"\n          :data=\"tableData\"\n          :stripe=\"true\"\n          :border=\"true\"\n          :show-overflow-tooltip=\"true\"\n          v-bind=\"tableProps\"\n          :allow-drag-last-column=\"false\"\n        >\n          <component\n            :is=\"column\"\n            v-for=\"(column, i) in tableChildren\"\n            :key=\"i\"\n          />\n          <ElTableColumn\n            v-if=\"isShow('actionsColumn')\"\n            :prop=\"actionsColumnProp\"\n            label=\"操作\"\n            fixed=\"right\"\n            v-bind=\"actionsColumnProps\"\n          >\n            <template #default=\"{ row }\">\n              <div class=\"item-actions\">\n                <ElButton\n                  v-if=\"isShow('viewButton')\"\n                  type=\"primary\"\n                  link\n                  @click=\"viewRow(row)\"\n                  >查看</ElButton\n                >\n                <template v-if=\"unfoldActions\">\n                  <ElButton\n                    v-if=\"isShow('editButton')\"\n                    type=\"primary\"\n                    link\n                    @click=\"onClickMenuItem({ row, command: 'edit' })\"\n                  >\n                    编辑</ElButton\n                  >\n                  <ElButton\n                    v-if=\"isShow('deleteButton')\"\n                    type=\"primary\"\n                    link\n                    class=\"action-delete\"\n                    @click=\"onClickMenuItem({ row, command: 'delete' })\"\n                    >删除</ElButton\n                  >\n                  <slot v-if=\"unfoldActions\" name=\"action\" v-bind=\"{ row }\" />\n                </template>\n                <template v-else>\n                  <ElDropdown\n                    v-if=\"isShow('editButton') && isShow('deleteButton')\"\n                    trigger=\"click\"\n                    @command=\"onClickMenuItem({ row, command: $event })\"\n                  >\n                    <ElButton type=\"primary\" link\n                      >更多<ElIcon size=\"12\" color=\"var(--el-color-primary)\">\n                        <ArrowDown />\n                      </ElIcon>\n                    </ElButton>\n                    <template #dropdown>\n                      <ElDropdownMenu ref=\"refMoreMenu\" class=\"actions-more\">\n                        <ElDropdownItem\n                          v-if=\"isShow('editButton')\"\n                          :disabled=\"!permissionValidate(permissions?.edit)\"\n                          command=\"edit\"\n                          >编辑</ElDropdownItem\n                        >\n                        <ElDropdownItem\n                          v-if=\"isShow('deleteButton')\"\n                          :disabled=\"!permissionValidate(permissions?.del)\"\n                          command=\"delete\"\n                          class=\"action-delete\"\n                          >删除</ElDropdownItem\n                        >\n                        <slot name=\"action\" v-bind=\"{ row }\" />\n                      </ElDropdownMenu>\n                    </template>\n                  </ElDropdown>\n                </template>\n              </div>\n            </template>\n          </ElTableColumn>\n        </ElTable>\n      </div>\n\n      <div v-if=\"isShow('page')\" class=\"page\">\n        <ElPagination\n          layout=\"total, sizes, prev, pager, next, jumper\"\n          :small=\"false\"\n          :background=\"true\"\n          :page-sizes=\"[10, 20, 50, 100]\"\n          :current-page=\"pageParam.page\"\n          :page-size=\"pageParam.size\"\n          :total=\"pageParam.total\"\n          v-bind=\"pageProps\"\n          @update:current-page=\"\n            emit('update:pageParam', { ...pageParam, page: $event })\n          \"\n          @update:page-size=\"\n            emit('update:pageParam', { ...pageParam, page: $event })\n          \"\n          @size-change=\"handleSizeChange\"\n          @current-change=\"handleCurrentChange\"\n        />\n      </div>\n\n      <YhDialog\n        v-model=\"isShowDetailDialog\"\n        :title=\"actionText\"\n        :from=\"action\"\n        :dialog-props=\"dialogProps\"\n        @confirm=\"onDialogConfirm\"\n      >\n        <component\n          :is=\"actions.find((it) => it.key === action)?.component\"\n          ref=\"refContent\"\n          :row=\"actionRow\"\n          :type=\"action\"\n        />\n      </YhDialog>\n    </div>\n  </div>\n</template>\n"],"names":[],"mappings":"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"}