index.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <template>
  2. <div>
  3. <a-table class="ant-table-striped" :loading="loading" size="small" :dataSource="props.dataSource" :columns="columns"
  4. :pagination="{showSizeChanger:true,defaultPageSize:20,total:total}" :scroll="{x:'max-content'}"
  5. :rowKey="'userid'"
  6. @change="onChange"
  7. :row-class-name="(_record, index) => (index % 2 === 1 ? 'table-striped' : null)" bordered>
  8. <template #bodyCell="{ column, record }">
  9. <template v-if="column.dataIndex === 'status'">
  10. <a-tag :color="utils.statusAndColor(record.status)">{{record.status}}</a-tag>
  11. </template>
  12. <slot v-else name="tb_cell" :data="{column, record}"></slot>
  13. </template>
  14. </a-table>
  15. </div>
  16. </template>
  17. <script setup>
  18. import Api from '@/api/api'
  19. import utils from '@/utils/utils'
  20. import { useAuthStore } from '@/stores/modules/auth'
  21. import { useBaseStore } from '@/stores/modules/base'
  22. import {defineEmits, defineExpose, onMounted, ref} from "vue";
  23. import {useRouter} from "vue-router";
  24. import {storeToRefs} from "pinia";
  25. import {re} from "mathjs";
  26. const emit = defineEmits(['list','onSelect'])
  27. const store = useAuthStore()
  28. const base = useBaseStore()
  29. let { tableRecord,fullscreen} = storeToRefs(base)
  30. const router = useRouter()
  31. const loading = ref(false)
  32. const columns = ref([])
  33. const total = ref(0)
  34. const selectedRowKeys = ref([])
  35. const props = defineProps({
  36. param: Object,
  37. tableName:String,
  38. dataSource:Array,
  39. keyRouteName:String,
  40. searchType:Array,
  41. detailPage:Object,
  42. noAutoQuery:Boolean
  43. })
  44. const onChange = (pagination, filters, sorter, { currentDataSource })=>{
  45. selectedRowKeys.value = tableRecord.value.map(e=>e.itemid)
  46. props.param.content.pageNumber = pagination.current
  47. props.param.content.pageSize = pagination.pageSize
  48. tableData()
  49. }
  50. const getTableLayout = ()=>{
  51. let _app = {}
  52. _app = JSON.parse(sessionStorage.getItem('app'))
  53. columns.value = _app.meta.tables[props.tableName].tablecols.map(e=>{
  54. return {
  55. title:e.title,
  56. dataIndex:e.columnname,
  57. width:e.width == 0?'150':e.width,
  58. ellipsis:true,
  59. fixed:e.columnname == 'operation'?'right':''
  60. }
  61. })
  62. }
  63. const onSelectChange =(changableRowKeys, selectedRows)=>{
  64. selectedRowKeys.value = changableRowKeys;
  65. emit('onSelect',selectedRows)
  66. }
  67. const tableData = async()=>{
  68. loading.value = true
  69. const res = await Api.requested(props.param)
  70. let selects = ref([])
  71. res.data.forEach(item=>{
  72. if (item.isleader === 1){
  73. console.log(item,'11111')
  74. console.log(item.enddate,'结束日期')
  75. if (item.enddate === '{}'){
  76. selectedRowKeys.value = [item.userid]
  77. selects.value[0] = item
  78. console.log(selects.value,2222)
  79. return
  80. }
  81. }
  82. })
  83. emit('onList',res.data)
  84. emit('onSelect',selects.value)
  85. total.value = res.total
  86. loading.value = false
  87. }
  88. defineExpose({
  89. tableData,
  90. })
  91. onMounted (()=>{
  92. getTableLayout()
  93. props.noAutoQuery ? '' : tableData()
  94. })
  95. </script>
  96. <style scoped>
  97. </style>