7021f2fd创建于 2025年5月14日历史提交
<template>
  <view class="list-container" :style="styleObject">
    <wd-table :data="dataSource" :ellipsis="true" height="300px">
      <template v-for="(item, index) in columns" :key="index" >
        <wd-table-col :prop="item.dataIndex" :label="item.title" :width="item.width" />
      </template>
    </wd-table>
  </view>
</template>

<script lang="ts" setup>
import { ref, computed, onMounted } from 'vue';
import { echartProps } from '../props';
import useChartHook from '@/pages-work/components/hooks/useEchart'
import {cloneDeep} from "lodash-es";
// 定义 props
const props = defineProps(echartProps);
// 使用 mixin
let [{ dataSource, reload, pageTips, config }, { queryData }] = useChartHook(props, initOption);
//列配置
const columns = ref([]);
//绑定配置项
const option = computed(() => {
  return {
    ...props.config.option,
  };
});

// 初始化
function initOption (data){
  if (config.dataType == '2' || config.dataType == 2) {
    //选择数据集的时候已经把表格列计算好了放到了option里面
    let allCol = cloneDeep(config?.option?.columns);
    //获取要展示的列
    let showCol = allCol.filter((item) => item.izShow === 'Y');
    //判断是否显示操作列
    if(config?.btnOperateData && config?.btnOperateData.length > 0){
      showCol.push({
        title: '操作',
        key: 'action',
        fixed: 'right',
        width: '100px'
      })
    }
    //计算列宽
    columns.value = showCol.map((item) => {
      item['width'] = showCol.length<3?'200px':'150px';
      item['ellipsis'] = true;
      return item;
    });
  } else {
    //静态数据
    let chartData = props.config.chartData;
    chartData = typeof chartData === 'string' ? JSON.parse(chartData) : chartData;
    if (chartData && chartData.length > 0) {
      let keys = Object.keys(chartData[0]);
      columns.value = keys.map((item) => {
        return { title: item, dataIndex: item, izTotal: 'N', width: keys.length<3?'200px':'150px'};
      });
    }
  }
  // 添加序号列
  if(props.config?.showNumber){
    columns.value.unshift({
      title: '序号',
      dataIndex: 'rowIndex',
      isShow: 'Y',
      fixed: 'left',
      key: 'rowIndex',
      width: '100px',
    });
  }
  console.log("表格dataSource",dataSource)
  console.log("表格columns.value",columns.value)
};
// 计算属性:生成样式对象
const styleObject = computed(() => {
  return {
    width: '100%',
    height: '400px',
    overflow: 'auto'
  };
});
// 生命周期钩子
onMounted(() => {
  queryData();
});


</script>

<style scoped lang="scss">

</style>