Initial commit: Shop Database Flask Application

Flask backend with Vue 3 frontend for shop floor machine management.
Includes database schema export for MySQL shopdb_flask database.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
cproudlock
2026-01-13 16:07:34 -05:00
commit 1196de6e88
188 changed files with 19921 additions and 0 deletions

View File

@@ -0,0 +1,79 @@
<template>
<div class="map-page">
<div class="page-header">
<h2>Shop Floor Map</h2>
</div>
<div v-if="loading" class="loading">Loading...</div>
<ShopFloorMap
v-else
:machines="machines"
:machinetypes="machinetypes"
:businessunits="businessunits"
:statuses="statuses"
@markerClick="handleMarkerClick"
/>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue'
import { useRouter } from 'vue-router'
import ShopFloorMap from '../components/ShopFloorMap.vue'
import { machinesApi, machinetypesApi, businessunitsApi, statusesApi } from '../api'
const router = useRouter()
const loading = ref(true)
const machines = ref([])
const machinetypes = ref([])
const businessunits = ref([])
const statuses = ref([])
onMounted(async () => {
try {
const [machinesRes, typesRes, busRes, statusRes] = await Promise.all([
machinesApi.list({ hasmap: true, all: true }),
machinetypesApi.list(),
businessunitsApi.list(),
statusesApi.list()
])
machines.value = machinesRes.data.data || []
machinetypes.value = typesRes.data.data || []
businessunits.value = busRes.data.data || []
statuses.value = statusRes.data.data || []
} catch (error) {
console.error('Failed to load map data:', error)
} finally {
loading.value = false
}
})
function handleMarkerClick(machine) {
const category = machine.category?.toLowerCase() || ''
const routeMap = {
'equipment': '/machines',
'pc': '/pcs',
'printer': '/printers'
}
const basePath = routeMap[category] || '/machines'
router.push(`${basePath}/${machine.machineid}`)
}
</script>
<style scoped>
.map-page {
display: flex;
flex-direction: column;
height: calc(100vh - 2rem);
}
.map-page .page-header {
flex-shrink: 0;
}
.map-page :deep(.shopfloor-map) {
flex: 1;
}
</style>