IndexPage.vue 1.9 KB
Newer Older
hucy's avatar
hucy committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
<!--
 * 表单 表格 
  -->
<script lang="ts">
export default {
  name: 'FORM_TEST',
};
</script>
<script setup lang="ts">
import { ref, reactive } from 'vue';
import { AgGridVue } from 'ag-grid-vue3';
import { cloneDeep } from 'src/common/utils';
import AG_GRID_LOCALE from 'src/config/ag-grid-locale';

import { defaultColDef, testData } from './config';

import FormDialog from './element/FormDialog.vue';

const formDialogRef = ref<any>(null);

const gridApi = ref<any>(null);
const gridColumnApi = ref<any>(null);

const columnDefs = reactive([
  { field: 'name', headerName: '姓名' },
  { field: 'age', headerName: '年龄' },
]);

const state = reactive({
  rowData: [] as any,
});

function onGridReady(params: any) {
  gridApi.value = params.api;
  gridColumnApi.value = params.columnApi;
  getData();
}

function getData() {
  state.rowData = cloneDeep(testData);
}

function clickAdd() {
  formDialogRef.value.openDialog();
}
hucy's avatar
hucy committed
46 47 48 49

function viewData() {
  console.log('查看', state.rowData);
}
hucy's avatar
hucy committed
50 51 52 53
</script>
<template>
  <div class="box">
    <div class="actions">
hucy's avatar
hucy committed
54 55
      <q-btn unelevated color="primary" label="添加" @click="clickAdd" />
      <q-btn unelevated color="primary" label="查看" @click="viewData" />
hucy's avatar
hucy committed
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
    </div>
    <div class="ag-table">
      <ag-grid-vue
        style="height: 550px"
        class="ag-theme-alpine"
        :animateRows="true"
        :localeText="AG_GRID_LOCALE"
        :suppressContextMenu="true"
        :suppressCellFocus="true"
        :defaultColDef="defaultColDef"
        :columnDefs="columnDefs"
        :rowData="state.rowData"
        @grid-ready="onGridReady"
      >
      </ag-grid-vue>
    </div>
    <form-dialog ref="formDialogRef" />
  </div>
</template>

<style lang="scss" scoped>
.actions {
  padding: 10px;
  display: flex;
  flex-direction: row;
  justify-content: flex-start;
  align-items: center;
  column-gap: 10px;
}
.ag-table {
  padding: 0 10px 10px 10px;
}
</style>