{"version":3,"file":"form-base-table-column.mjs","names":[],"sources":["../../../../../../packages/components/form-base/src/form-base-table-column.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport formBaseTableRender from './form-base-table-render.vue'\nimport formBaseTableExpandRender from './form-base-table-expand-render.vue'\nimport { get } from 'lodash-unified'\n\nimport type { FormBaseColumnsItem } from './form-base'\n\ndefineOptions({\n  name: 'ElFormBaseTableColumn',\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 getTagText = (props: any, row: any) => {\n  const status = props.column.tagConfig.status\n  if (status?.length > 0) {\n    const datum = status.find(\n      (item: any) => item.source === row[props.column.prop]\n    )\n    return datum?.text\n  }\n}\n\nconst getTagType = (props: any, row: any) => {\n  const status = props.column.tagConfig.status\n  if (status?.length > 0) {\n    const datum = status.find(\n      (item: any) => item.source === row[props.column.prop]\n    )\n    return datum?.type\n  }\n}\n\nconst getRowText = (row: any, props: any) => {\n  const text = get(row, props)\n  return text\n}\n</script>\n\n<template>\n  <el-table-column\n    v-if=\"handleHidden\"\n    :key=\"props.column.prop\"\n    :prop=\"props.column.prop\"\n    :label=\"props.column.label\"\n    :width=\"props.column.width\"\n    :min-width=\"props.column.minWidth\"\n    :align=\"props.column.align\"\n    :sortable=\"props.column.sortable ? 'custom' : false\"\n    :sort-orders=\"props.column.sortable ? ['descending', 'ascending'] : []\"\n    :fixed=\"props.column.fixed ? props.column.fixed : false\"\n    :resizable=\"props.column.resizable\"\n    :show-overflow-tooltip=\"\n      props.column.showOverflow ? props.column.showOverflow : false\n    \"\n    :type=\"props.column.expand ? 'expand' : 'default'\"\n  >\n    <template #default=\"scope\">\n      <template\n        v-if=\"props.column.children && props.column.children.length > 0\"\n      >\n        <el-form-base-table-column\n          v-for=\"(item, index) in props.column.children\"\n          :key=\"index\"\n          :column=\"item\"\n          :columns-data=\"props.columnsData\"\n        />\n      </template>\n      <template v-else-if=\"!props.column.render\">\n        <template v-if=\"props.column.swithcConfig\">\n          <el-switch\n            v-if=\"isFn(props.column.swithcConfig.isShow, scope.row)\"\n            v-model=\"scope.row[props.column.prop]\"\n            :disabled=\"isFn(props.column.swithcConfig.disabled, scope.row)\"\n            :before-change=\"\n              props.column.swithcConfig.beforeChange?.bind(null, scope.row)\n            \"\n            @change=\"props.column.swithcConfig.on(scope.row)\"\n          />\n        </template>\n        <template v-else-if=\"props.column.tagConfig\">\n          <el-tag\n            v-if=\"isFn(props.column.tagConfig.isShow, scope.row)\"\n            :type=\"getTagType(props, scope.row)\"\n            @click=\"props.column.tagConfig.on(scope.row)\"\n            >{{ getTagText(props, scope.row) }}</el-tag\n          >\n          <!-- {{ getTagText(props, scope.row) }} -->\n        </template>\n        <template v-else-if=\"props.column.dateFormatter\">\n          {{ toFormat(props, scope.row) }}\n        </template>\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.children && props.column.render\"\n        :row=\"props.column\"\n        :scope=\"scope\"\n      />\n      <form-base-table-expand-render\n        v-if=\"!props.column.children && props.column.expand\"\n        :row=\"props.column\"\n        :scope=\"scope\"\n      />\n    </template>\n  </el-table-column>\n</template>\n"],"mappings":""}