Add frontend/src/views/TableView.vue
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
<template>
|
||||
<div class="table-view">
|
||||
<h2>Table {{ tableId }}</h2>
|
||||
<div class="spreadsheet">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th v-for="col in columns" :key="col.id">{{ col.name }}</th>
|
||||
<th><button @click="addColumn" class="btn-small">+</button></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="row in rows" :key="row">
|
||||
<td v-for="col in columns" :key="col.id">
|
||||
<input type="text" v-model="cellValues[row][col.id]" />
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<button @click="addRow" class="btn">Add Row</button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import api from '../api'
|
||||
|
||||
const route = useRoute()
|
||||
const tableId = route.params.id
|
||||
const columns = ref([])
|
||||
const rows = ref([1, 2, 3, 4, 5])
|
||||
const cellValues = ref({})
|
||||
|
||||
onMounted(async () => {
|
||||
const response = await api.get(`/tables/${tableId}/columns`)
|
||||
columns.value = response.data
|
||||
cellValues.value = {}
|
||||
rows.value.forEach(r => {
|
||||
cellValues.value[r] = {}
|
||||
columns.value.forEach(c => {
|
||||
cellValues.value[r][c.id] = ''
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
const addColumn = async () => {
|
||||
const name = prompt('Column name:')
|
||||
if (name) {
|
||||
const response = await api.post(`/tables/${tableId}/columns`, { name, field_type: 'text' })
|
||||
columns.value.push(response.data)
|
||||
}
|
||||
}
|
||||
|
||||
const addRow = () => {
|
||||
const newRow = Math.max(...rows.value) + 1
|
||||
rows.value.push(newRow)
|
||||
cellValues.value[newRow] = {}
|
||||
columns.value.forEach(c => {
|
||||
cellValues.value[newRow][c.id] = ''
|
||||
})
|
||||
}
|
||||
</script>
|
||||
Reference in New Issue
Block a user