index.vue 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <template>
  2. <view :class="classes">
  3. <view class="nut-table__main" :class="{ 'nut-table__main--striped': striped }">
  4. <view class="nut-table__main__head">
  5. <view class="nut-table__main__head__tr">
  6. <span
  7. class="nut-table__main__head__tr__th"
  8. :class="cellClasses(item)"
  9. v-for="item in columns"
  10. :key="item.key"
  11. @click="handleSorterClick(item)"
  12. >
  13. {{ item.title }}
  14. <slot name="icon"></slot>
  15. <nut-icon v-if="!$slots.icon && item.sorter" name="down-arrow" size="12px"></nut-icon>
  16. </span>
  17. </view>
  18. </view>
  19. <view class="nut-table__main__body">
  20. <view class="nut-table__main__body__tr" v-for="item in curData" :key="item">
  21. <span
  22. class="nut-table__main__body__tr__td"
  23. :class="cellClasses(getColumnItem(value))"
  24. v-for="value in sortDataItem()"
  25. :key="value"
  26. >
  27. {{ typeof item[value] !== 'function' ? item[value] : '' }}
  28. <RenderColumn :slots="item[value]" v-if="typeof item[value] === 'function'"></RenderColumn>
  29. </span>
  30. </view>
  31. </view>
  32. </view>
  33. <view class="nut-table__summary" v-if="summary">
  34. <span class="nut-table__summary__text" v-html="summary().value"></span>
  35. </view>
  36. <view class="nut-table__nodata" v-if="!curData.length">
  37. <div class="nut-table__nodata" :class="{ 'nut-table__nodata--border': bordered }">
  38. <slot name="nodata"></slot>
  39. <div v-if="!$slots.nodata" class="nut-table__nodata__text"> {{ translate('noData') }} </div>
  40. </div>
  41. </view>
  42. </view>
  43. </template>
  44. <script lang="ts">
  45. import { createComponent } from '../../utils/create';
  46. const { componentName, create, translate } = createComponent('table');
  47. import { component } from './common';
  48. export default create(component(componentName, translate));
  49. </script>