personColumns.tsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import { ref } from "vue";
  2. import { delObjectProperty } from "@pureadmin/utils";
  3. import Person from "@/model/person.js";
  4. export function usePersonColumns() {
  5. const personEditMap = ref({});
  6. const personDataList = ref([]);
  7. const personColumns: TableColumnList = [
  8. {
  9. label: "ID",
  10. prop: "id",
  11. cellRenderer: ({ row, index }) => (
  12. <>
  13. {personEditMap.value[index]?.editable ? (
  14. <el-input v-model={row.id} />
  15. ) : (
  16. <p>{row.id}</p>
  17. )}
  18. </>
  19. )
  20. },
  21. {
  22. label: "名称",
  23. prop: "name",
  24. cellRenderer: ({ row, index }) => (
  25. <>
  26. {personEditMap.value[index]?.editable ? (
  27. <el-input v-model={row.name} />
  28. ) : (
  29. <p>{row.name}</p>
  30. )}
  31. </>
  32. )
  33. },
  34. {
  35. label: "职位",
  36. prop: "job",
  37. cellRenderer: ({ row, index }) => (
  38. <>
  39. {personEditMap.value[index]?.editable ? (
  40. <el-input v-model={row.job} />
  41. ) : (
  42. <p>{row.job}</p>
  43. )}
  44. </>
  45. )
  46. },
  47. {
  48. label: "电话",
  49. prop: "phone",
  50. cellRenderer: ({ row, index }) => (
  51. <>
  52. {personEditMap.value[index]?.editable ? (
  53. <el-input v-model={row.phone} />
  54. ) : (
  55. <p>{row.phone}</p>
  56. )}
  57. </>
  58. )
  59. },
  60. {
  61. label: "所属区域",
  62. prop: "locId",
  63. cellRenderer: ({ row, index }) => (
  64. <>
  65. {personEditMap.value[index]?.editable ? (
  66. <el-input v-model={row.locId} />
  67. ) : (
  68. <p>{row.locId}</p>
  69. )}
  70. </>
  71. )
  72. },
  73. {
  74. label: "标签ID",
  75. prop: "tagId",
  76. cellRenderer: ({ row, index }) => (
  77. <>
  78. {personEditMap.value[index]?.editable ? (
  79. <el-input v-model={row.tagId} />
  80. ) : (
  81. <p>{row.tagId}</p>
  82. )}
  83. </>
  84. )
  85. },
  86. {
  87. label: "操作",
  88. fixed: "right",
  89. width: 140,
  90. slot: "operation"
  91. }
  92. ];
  93. function onEditPerson(row, index) {
  94. personEditMap.value[index] = Object.assign({ ...row, editable: true });
  95. }
  96. function onSavePerson(index) {
  97. personEditMap.value[index].editable = false;
  98. }
  99. function onCancelPerson(index) {
  100. personEditMap.value[index].editable = false;
  101. personDataList.value[index] = delObjectProperty(personEditMap.value[index], "editable");
  102. }
  103. function onAddPerson() {
  104. const v = new Person();
  105. v.id = personDataList.value.length + 1;
  106. personDataList.value.push(v);
  107. }
  108. function onDelPerson(row) {
  109. const index = personDataList.value.indexOf(row);
  110. if (index !== -1) personDataList.value.splice(index, 1);
  111. }
  112. return {
  113. personEditMap,
  114. personColumns,
  115. personDataList,
  116. onAddPerson,
  117. onDelPerson,
  118. onEditPerson,
  119. onSavePerson,
  120. onCancelPerson
  121. };
  122. }