columns.tsx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import { ref } from "vue";
  2. import { tableData, options } from "../data";
  3. import { clone, delObjectProperty } from "@pureadmin/utils";
  4. export function useColumns() {
  5. const editMap = ref({});
  6. const dataList = ref(clone(tableData, true));
  7. const columns: TableColumnList = [
  8. {
  9. label: "姓名",
  10. prop: "name",
  11. cellRenderer: ({ row, index }) => (
  12. <>
  13. {editMap.value[index]?.editable ? (
  14. <el-input v-model={row.name} />
  15. ) : (
  16. <p>{row.name}</p>
  17. )}
  18. </>
  19. )
  20. },
  21. {
  22. label: "性别",
  23. prop: "sex",
  24. cellRenderer: ({ row, index }) => (
  25. <>
  26. {editMap.value[index]?.editable ? (
  27. <el-switch
  28. v-model={row.sex}
  29. inline-prompt
  30. active-value={0}
  31. inactive-value={1}
  32. active-text="男"
  33. inactive-text="女"
  34. />
  35. ) : (
  36. <p>{row.sex === 0 ? "男" : "女"}</p>
  37. )}
  38. </>
  39. )
  40. },
  41. {
  42. label: "爱好",
  43. prop: "hobby",
  44. cellRenderer: ({ row, index }) => (
  45. <>
  46. {editMap.value[index]?.editable ? (
  47. <el-select v-model={row.hobby} clearable placeholder="请选择爱好">
  48. {options.map(item => {
  49. return (
  50. <el-option
  51. key={item.value}
  52. label={item.label}
  53. value={item.value}
  54. />
  55. );
  56. })}
  57. </el-select>
  58. ) : (
  59. <el-tag type="primary">
  60. {options.filter(opt => opt.value == row.hobby)[0]?.label}
  61. </el-tag>
  62. )}
  63. </>
  64. )
  65. },
  66. {
  67. label: "日期",
  68. prop: "date",
  69. cellRenderer: ({ row, index }) => (
  70. <>
  71. {editMap.value[index]?.editable ? (
  72. <el-date-picker
  73. v-model={row.date}
  74. type="date"
  75. format="YYYY/MM/DD"
  76. value-format="YYYY-MM-DD"
  77. placeholder="请选择日期"
  78. />
  79. ) : (
  80. <p>{row.date}</p>
  81. )}
  82. </>
  83. ),
  84. minWidth: 110
  85. },
  86. {
  87. label: "操作",
  88. fixed: "right",
  89. slot: "operation"
  90. }
  91. ];
  92. function onEdit(row, index) {
  93. editMap.value[index] = Object.assign({ ...row, editable: true });
  94. }
  95. function onSave(index) {
  96. editMap.value[index].editable = false;
  97. }
  98. function onCancel(index) {
  99. editMap.value[index].editable = false;
  100. dataList.value[index] = delObjectProperty(editMap.value[index], "editable");
  101. }
  102. return {
  103. editMap,
  104. columns,
  105. dataList,
  106. onEdit,
  107. onSave,
  108. onCancel
  109. };
  110. }