ColumnsSetting.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <template>
  2. <div>
  3. <a-button html-type="submit" type="text" @click="openModel" class="open-btn">
  4. <template #icon>
  5. <setting-outlined/>
  6. </template>
  7. 字段设置
  8. </a-button>
  9. <!-- 字段设置对话框 -->
  10. <a-modal v-model:visible="columnsSettingsVisible" title="字段设置" width="600px">
  11. <!-- 字段列表 -->
  12. <div>
  13. <a-checkbox-group v-model:value="checkedColumnsList">
  14. <div class="check-div">
  15. <a-checkbox v-for="(item, index) in tableColumns" :key="index" :value="item.key"
  16. :disabled="item.isDisabled">
  17. {{ item.title }}
  18. </a-checkbox>
  19. </div>
  20. </a-checkbox-group>
  21. </div>
  22. <!-- 功能按钮 -->
  23. <template #footer>
  24. <div style="width:100%;display: flex; justify-content: space-between">
  25. <div>
  26. <a-button key="back" @click="onCheckAll(true)">全选</a-button>
  27. <a-button key="back" @click="onCheckAll(false)">反选</a-button>
  28. </div>
  29. <div>
  30. <a-button key="back" @click="onClose">取消</a-button>
  31. <a-button key="submit" type="primary" @click="onSubmit">确定</a-button>
  32. </div>
  33. </div>
  34. </template>
  35. </a-modal>
  36. </div>
  37. </template>
  38. <script setup lang="ts">
  39. import {ref} from "vue";
  40. const props = defineProps(["tableColumns", "checkedTableColumns"]);
  41. const emits = defineEmits(["onCheck"]);
  42. // 对话框开关
  43. const columnsSettingsVisible = ref<boolean>(false)
  44. // 已选择的表格列
  45. const checkedColumnsList = ref<Array<any>>([]);
  46. // 开启对话框
  47. function openModel() {
  48. columnsSettingsVisible.value = true;
  49. checkedColumnsList.value = props.checkedTableColumns.map((item: any) => item.key);
  50. }
  51. // 全选 or 反选
  52. function onCheckAll(isChecked: boolean) {
  53. if (isChecked) {
  54. checkedColumnsList.value = props.tableColumns.map((item: any) => item.key);
  55. } else {
  56. checkedColumnsList.value = props.tableColumns.map((item: any) => {
  57. if (checkedColumnsList.value.findIndex((x: any) => x == item.key)<0) {
  58. return item.key;
  59. }
  60. });
  61. }
  62. }
  63. // 关闭对话框
  64. function onClose() {
  65. columnsSettingsVisible.value = false;
  66. checkedColumnsList.value = []
  67. }
  68. // 确定选择
  69. function onSubmit() {
  70. emits("onCheck", JSON.parse(JSON.stringify(checkedColumnsList.value)));
  71. onClose();
  72. }
  73. </script>
  74. <style scoped>
  75. .open-btn {
  76. display: flex;
  77. align-items: center;
  78. color: #6b6b6b;
  79. }
  80. .check-div {
  81. display: grid;
  82. grid-template-columns: repeat(4, minmax(0, 1fr));
  83. column-gap: 8px;
  84. row-gap: 12px;
  85. .ant-checkbox-wrapper {
  86. margin-left: 8px !important;
  87. }
  88. }
  89. </style>