PageSearchSetting.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <template>
  2. <div class="full-height">
  3. <SmartTable
  4. v-bind="$attrs"
  5. :data="dataList"
  6. @register="registerTable"
  7. :size="tableSizeConfig"
  8. />
  9. </div>
  10. </template>
  11. <script lang="ts" setup>
  12. import { onMounted, PropType, ref, watch } from 'vue';
  13. import { SmartTable, useSmartTable } from '@/components/SmartTable';
  14. import { useSizeSetting } from '@/hooks/setting/UseSizeSetting';
  15. import { useI18n } from 'vue-i18n';
  16. import { getPageSearchSettingColumn } from '../../CodeDesignPage.config';
  17. const props = defineProps({
  18. tableData: {
  19. type: Array as PropType<Array<any>>,
  20. default: () => [],
  21. },
  22. editData: {
  23. type: Array as PropType<Array<any>>,
  24. },
  25. });
  26. const { t } = useI18n();
  27. const { tableSizeConfig } = useSizeSetting();
  28. const dataList = ref<Array<any>>([]);
  29. watch(
  30. () => props.tableData,
  31. () => {
  32. dataList.value = createDataFromTableData(props.tableData, props.editData);
  33. },
  34. );
  35. onMounted(() => {
  36. dataList.value = createDataFromTableData(props.tableData, props.editData);
  37. });
  38. const [registerTable] = useSmartTable({
  39. columns: getPageSearchSettingColumn(t),
  40. rowConfig: {
  41. isHover: true,
  42. useKey: true,
  43. dragConfig: true,
  44. keyField: 'javaProperty',
  45. },
  46. editConfig: {
  47. trigger: 'click',
  48. mode: 'cell',
  49. showStatus: true,
  50. showUpdateStatus: true,
  51. showInsertStatus: true,
  52. },
  53. keepSource: true,
  54. border: true,
  55. stripe: true,
  56. align: 'center',
  57. columnConfig: {
  58. resizable: true,
  59. },
  60. mouseConfig: { selected: true },
  61. keyboardConfig: {
  62. isArrow: true,
  63. isDel: true,
  64. isEnter: true,
  65. isTab: true,
  66. isEdit: true,
  67. isChecked: true,
  68. },
  69. });
  70. const copyField = [
  71. 'columnName',
  72. 'remarks',
  73. 'nullable',
  74. 'javaProperty',
  75. 'extType',
  76. 'javaType',
  77. 'simpleJavaType',
  78. ];
  79. const createDataFromTableData = (tableData: Array<any>, editData: any[] | undefined) => {
  80. if (editData) {
  81. return editData;
  82. }
  83. return tableData.map((item) => {
  84. const data: any = {};
  85. copyField.forEach((field) => {
  86. data[field] = item[field];
  87. });
  88. return Object.assign(data, {
  89. title: data.remarks || data.javaProperty,
  90. readonly: false,
  91. visible: true,
  92. hidden: false,
  93. used: true,
  94. controlType: 'INPUT',
  95. searchSymbol: '=',
  96. rules: [],
  97. useTableSearch: false,
  98. });
  99. });
  100. };
  101. </script>
  102. <style scoped></style>