columns.tsx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import { tableData } from "../../data";
  2. import { delay } from "@pureadmin/utils";
  3. import { ref, onMounted, reactive } from "vue";
  4. import type { PaginationProps } from "@pureadmin/table";
  5. import ThumbUp from "~icons/ri/thumb-up-line";
  6. import Hearts from "~icons/ri/hearts-line";
  7. import Empty from "./empty.svg?component";
  8. import { parseTime } from "@/utils/time";
  9. export function useColumns() {
  10. const loading = ref(true);
  11. const columns: TableColumnList = [
  12. {
  13. sortable: true,
  14. label: "考勤日期",
  15. prop: "tm",
  16. cellRenderer: ({ row }) => (
  17. <div>
  18. { parseTime(row.tm) }
  19. </div>
  20. )
  21. },
  22. {
  23. sortable: true,
  24. label: "项目名称",
  25. prop: "projName"
  26. },
  27. {
  28. sortable: true,
  29. label: "区域名称",
  30. prop: "locName"
  31. },
  32. {
  33. sortable: true,
  34. label: "考勤基站",
  35. prop: "ancAddr"
  36. },
  37. {
  38. sortable: true,
  39. label: "考勤人次",
  40. prop: "attendPerson",
  41. // filterMultiple: false,
  42. // filterClassName: "pure-table-filter",
  43. // filters: [
  44. // { text: "≥16000", value: "more" },
  45. // { text: "<16000", value: "less" }
  46. // ],
  47. // filterMethod: (value, { requiredNumber }) => {
  48. // return value === "more"
  49. // ? requiredNumber >= 16000
  50. // : requiredNumber < 16000;
  51. // }
  52. },
  53. {
  54. sortable: true,
  55. label: "到岗人次",
  56. prop: "arrivePerson"
  57. },
  58. {
  59. sortable: true,
  60. label: "在线人次",
  61. prop: "onlinePerson"
  62. },
  63. {
  64. sortable: true,
  65. label: "到岗率",
  66. minWidth: 100,
  67. prop: "satisfaction",
  68. cellRenderer: ({ row }) => (
  69. <div class="flex justify-center w-full">
  70. <span class="flex items-center w-[60px]">
  71. <span class="ml-auto mr-2">{row.attendPerson > 0 ? Math.round(row.arrivePerson/row.attendPerson* 100) : 0}%</span>
  72. {/* <iconifyIconOffline
  73. icon={row.satisfaction > 98 ? Hearts : ThumbUp}
  74. color="#e85f33"
  75. /> */}
  76. </span>
  77. </div>
  78. )
  79. },
  80. {
  81. label: "操作",
  82. fixed: "right",
  83. slot: "operation"
  84. }
  85. ];
  86. /** 分页配置 */
  87. const pagination = reactive<PaginationProps>({
  88. pageSize: 10,
  89. currentPage: 1,
  90. layout: "prev, pager, next",
  91. total: 0,
  92. align: "center"
  93. });
  94. function onCurrentChange(page: number) {
  95. console.log("onCurrentChange", page);
  96. loading.value = true;
  97. delay(300).then(() => {
  98. loading.value = false;
  99. });
  100. }
  101. onMounted(() => {
  102. pagination.total = tableData.value.length;
  103. loading.value = false;
  104. });
  105. return {
  106. Empty,
  107. loading,
  108. columns,
  109. pagination,
  110. onCurrentChange
  111. };
  112. }