{"version":3,"file":"form-base-table-column-virtually.mjs","names":[],"sources":["../../../../../../packages/components/form-base/src/form-base-table-column-virtually.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport { get } from 'lodash-unified'\nimport formBaseTableRender from './form-base-table-render.vue'\nimport type { FormBaseColumnsItem } from './form-base'\n\ndefineOptions({\n  name: 'ElFormBaseTableColumnVirtually',\n})\n\nconst props = defineProps({\n  column: Object as any,\n  columnsData: {\n    type: Array<any>,\n    default: () => [],\n  },\n})\n\nconst emit = defineEmits({\n  'click-info': (columns: any, row: any) => columns && row,\n})\n\nconst handleHidden = computed(() => {\n  if (typeof props.column.hidden === 'boolean') {\n    return props.column.hidden\n  }\n  return true\n})\n\nconst handleClick = (columns: FormBaseColumnsItem, row: any) => {\n  emit('click-info', columns, row)\n}\n\nconst getLink = computed(() => {\n  if (props.column.isLink || props.column.isDetails) {\n    return 'form-base__link__text'\n  }\n  return ''\n})\n\nconst isFn = (val: any, row: any, flag = true) => {\n  if (typeof val === 'boolean') {\n    return val\n  }\n  if (typeof val === 'string') {\n    return val\n  }\n  if (typeof val === 'function') {\n    return val(row)\n  }\n  return flag\n}\n\nconst toFormat = (props: any, row: any) => {\n  if (row[props.column.prop]) {\n    const formatter = isFn(props.column.dateFormatter, row, false)\n    const date = formatDate(row[props.column.prop], formatter)\n    if (date) {\n      return date\n    }\n    return row[props.column.prop]\n  }\n  return row[props.column.prop]\n}\n\nfunction formatDate(date: any, fmt = 'yyyy-mm-dd hh:MM:ss') {\n  if (!date) {\n    return false\n  }\n  // 如果为null,则格式化当前时间\n  date = new Date(date)\n\n  if (date.toString() === 'Invalid Date') {\n    return false\n  }\n  let ret\n  const opt: any = {\n    'y+': date.getFullYear().toString(),\n    'm+': (date.getMonth() + 1).toString(),\n    'd+': date.getDate().toString(),\n    'h+': date.getHours().toString(),\n    'M+': date.getMinutes().toString(),\n    's+': date.getSeconds().toString(),\n    // 有其他格式化字符需求可以继续添加，必须转化成字符串\n  }\n  for (const k in opt) {\n    ret = new RegExp(`(${k})`).exec(fmt)\n    if (ret) {\n      fmt = fmt.replace(\n        ret[1],\n        ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, '0')\n      )\n    }\n  }\n  return fmt\n}\n\nconst getRowText = (row: any, props: any) => {\n  const text = get(row, props)\n  return text\n}\n</script>\n\n<template>\n  <VxeColumn\n    v-if=\"handleHidden && !props.column.children\"\n    :key=\"props.column.prop\"\n    :field=\"props.column.prop\"\n    :title=\"props.column.label\"\n    :width=\"props.column.width\"\n    :min-width=\"props.column.minWidth\"\n    :align=\"props.column.align\"\n    :sortable=\"props.column.sortable\"\n    :fixed=\"props.column.fixed ? props.column.fixed : false\"\n    :resizable=\"props.column.resizable\"\n    :tree-node=\"props.column.treeNode ? props.column.treeNode : false\"\n  >\n    <template v-if=\"!props.column.children\" #default=\"scope\">\n      <template v-if=\"!props.column.render\">\n        <template v-if=\"props.column.dateFormatter\">\n          {{ toFormat(props, scope.row) }}\n        </template>\n\n        <template v-else>\n          <template v-if=\"props.column.renderTooltip\">\n            <el-tooltip\n              :content=\"\n                props.column.renderTooltip(scope.row, columnsData).toString()\n              \"\n              placement=\"top\"\n              :open-delay=\"500\"\n              effect=\"dark\"\n            >\n              <span class=\"el-form-base-tooltip\">{{\n                getRowText(scope.row, props.column.prop)\n              }}</span>\n            </el-tooltip>\n          </template>\n          <template v-else>\n            <span\n              :class=\"[getLink]\"\n              @click=\"handleClick(props.column, scope.row)\"\n              >{{ scope.row[props.column.prop] }}</span\n            >\n          </template>\n        </template>\n      </template>\n      <form-base-table-render\n        v-if=\"props.column.render\"\n        :row=\"props.column\"\n        :scope=\"scope\"\n      />\n    </template>\n    <template v-if=\"props.column.children && props.column.children.length > 0\">\n      <el-form-base-table-column-virtually\n        v-for=\"item in props.column.children\"\n        :key=\"item.prop\"\n        :column=\"item\"\n        :columnsData=\"props.columnsData\"\n      />\n    </template>\n  </VxeColumn>\n  <VxeColgroup\n    v-else\n    :title=\"props.column.label\"\n    :width=\"props.column.width\"\n    :min-width=\"props.column.minWidth\"\n    :align=\"props.column.align\"\n    :sortable=\"props.column.sortable\"\n    :fixed=\"props.column.fixed ? props.column.fixed : false\"\n    :resizable=\"props.column.resizable\"\n  >\n    <template v-for=\"item in props.column.children\" :key=\"item.prop\">\n      <el-form-base-table-column-virtually\n        :column=\"item\"\n        :columnsData=\"props.columnsData\"\n      />\n    </template>\n  </VxeColgroup>\n</template>\n"],"mappings":""}