columns.tsx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import { ref } from "vue";
  2. import { options } from "../data";
  3. export function useColumns() {
  4. const dataList = ref([]);
  5. const columns: TableColumnList = [
  6. {
  7. label: "姓名",
  8. prop: "name",
  9. cellRenderer: ({ row }) => <el-input v-model={row.name} />
  10. },
  11. {
  12. label: "性别",
  13. prop: "sex",
  14. cellRenderer: ({ row }) => (
  15. <el-switch
  16. v-model={row.sex}
  17. inline-prompt
  18. active-value={0}
  19. inactive-value={1}
  20. active-text="男"
  21. inactive-text="女"
  22. />
  23. )
  24. },
  25. {
  26. label: "爱好",
  27. prop: "hobby",
  28. cellRenderer: ({ row }) => (
  29. <el-select v-model={row.hobby} clearable placeholder="请选择爱好">
  30. {options.map(item => {
  31. return (
  32. <el-option
  33. key={item.value}
  34. label={item.label}
  35. value={item.value}
  36. />
  37. );
  38. })}
  39. </el-select>
  40. )
  41. },
  42. {
  43. label: "日期",
  44. prop: "date",
  45. cellRenderer: ({ row }) => (
  46. <el-date-picker
  47. v-model={row.date}
  48. type="date"
  49. format="YYYY/MM/DD"
  50. value-format="YYYY-MM-DD"
  51. placeholder="请选择日期"
  52. />
  53. ),
  54. minWidth: 110
  55. },
  56. {
  57. label: "操作",
  58. fixed: "right",
  59. width: 90,
  60. slot: "operation"
  61. }
  62. ];
  63. function onAdd() {
  64. dataList.value.push({
  65. id: dataList.value.length + 1,
  66. name: "",
  67. sex: 0,
  68. hobby: "",
  69. date: ""
  70. });
  71. }
  72. function onDel(row) {
  73. const index = dataList.value.indexOf(row);
  74. if (index !== -1) dataList.value.splice(index, 1);
  75. }
  76. return {
  77. columns,
  78. dataList,
  79. onAdd,
  80. onDel
  81. };
  82. }