diff --git a/backend/controllers/falukantController.js b/backend/controllers/falukantController.js index c609f21..13c628e 100644 --- a/backend/controllers/falukantController.js +++ b/backend/controllers/falukantController.js @@ -58,6 +58,8 @@ class FalukantController { this.renovate = this.renovate.bind(this); this.renovateAll = this.renovateAll.bind(this); this.createBranch = this.createBranch.bind(this); + this.getUndergroundTypes = this.getUndergroundTypes.bind(this); + this.getNotifications = this.getNotifications.bind(this); } async getUser(req, res) { @@ -806,6 +808,28 @@ class FalukantController { console.log(error); } } + + async getUndergroundTypes(req, res) { + try { + const { userid: hashedUserId } = req.headers; + const result = await FalukantService.getUndergroundTypes(hashedUserId); + res.status(200).json(result); + } catch (error) { + res.status(500).json({ error: error.message }); + console.log(error); + } + } + + async getNotifications(req, res) { + try { + const { userid: hashedUserId } = req.headers; + const result = await FalukantService.getNotifications(hashedUserId); + res.status(200).json(result); + } catch (error) { + res.status(500).json({ error: error.message }); + console.log(error); + } + } } export default FalukantController; diff --git a/backend/controllers/navigationController.js b/backend/controllers/navigationController.js index 6b3a308..d3c9fd9 100644 --- a/backend/controllers/navigationController.js +++ b/backend/controllers/navigationController.js @@ -56,6 +56,19 @@ const menuStructure = { diary: { visible: ["all"], path: "/socialnetwork/diary" + }, + erotic: { + visible: ["over18"], + children: { + pictures: { + visible: ["over18"], + path: "/socialnetwork/erotic/pictures" + }, + videos: { + visible: ["over18"], + path: "/socialnetwork/erotic/videos" + } + } } } }, @@ -70,6 +83,10 @@ const menuStructure = { randomChat: { visible: ["over12"], action: "openRanomChat" + }, + eroticChat: { + visible: ["over18"], + action: "openEroticChat" } } }, @@ -248,6 +265,8 @@ class NavigationController { if (value.visible.includes("all") || value.visible.some(v => rights.includes(v) || (value.visible.includes("anyadmin") && rights.length > 0)) || (value.visible.includes("over14") && age >= 14) + || (value.visible.includes("over12") && age >= 12) + || (value.visible.includes("over18") && age >= 18) || (value.visible.includes('nofalukantaccount') && !hasFalukantAccount) || (value.visible.includes('hasfalukantaccount') && hasFalukantAccount)) { const { visible, ...itemWithoutVisible } = value; diff --git a/backend/models/associations.js b/backend/models/associations.js index c58ff41..2bb8ed0 100644 --- a/backend/models/associations.js +++ b/backend/models/associations.js @@ -88,6 +88,8 @@ import PoliticalOfficeRequirement from './falukant/predefine/political_office_pr import PoliticalOfficePrerequisite from './falukant/predefine/political_office_prerequisite.js'; import PoliticalOfficeHistory from './falukant/log/political_office_history.js'; import ElectionHistory from './falukant/log/election_history.js'; +import Underground from './falukant/data/underground.js'; +import UndergroundType from './falukant/type/underground.js'; export default function setupAssociations() { // UserParam related associations @@ -675,7 +677,7 @@ export default function setupAssociations() { PoliticalOfficeType.hasMany(PoliticalOfficeHistory, { foreignKey: 'officeTypeId', - as: 'history', + as: 'history', }); FalukantCharacter.hasMany(PoliticalOfficeHistory, { @@ -686,7 +688,7 @@ export default function setupAssociations() { foreignKey: 'characterId', as: 'character', }); - + ElectionHistory.belongsTo(PoliticalOfficeType, { foreignKey: 'officeTypeId', as: 'officeTypeHistory', @@ -696,5 +698,34 @@ export default function setupAssociations() { foreignKey: 'officeTypeId', as: 'electionHistory', } - ) + ); + + Underground.belongsTo(UndergroundType, { + foreignKey: 'undergroundTypeId', + as: 'undergroundType' + }); + UndergroundType.hasMany(Underground, { + foreignKey: 'undergroundTypeId', + as: 'undergrounds' + }); + + // 2) Täter (performer) + Underground.belongsTo(FalukantCharacter, { + foreignKey: 'performerId', + as: 'performer' + }); + FalukantCharacter.hasMany(Underground, { + foreignKey: 'performerId', + as: 'performedUndergrounds' + }); + + // 3) Opfer (victim) + Underground.belongsTo(FalukantCharacter, { + foreignKey: 'victimId', + as: 'victim' + }); + FalukantCharacter.hasMany(Underground, { + foreignKey: 'victimId', + as: 'victimUndergrounds' + }); } diff --git a/backend/models/falukant/data/underground.js b/backend/models/falukant/data/underground.js new file mode 100644 index 0000000..7d37dca --- /dev/null +++ b/backend/models/falukant/data/underground.js @@ -0,0 +1,36 @@ +import { Model, DataTypes } from 'sequelize'; +import { sequelize } from '../../../utils/sequelize.js'; + +class Underground extends Model { } + +Underground.init({ + undergroundTypeId: { + type: DataTypes.STRING, + allowNull: false, + }, + performerId: { + type: DataTypes.INTEGER, + allowNull: false, + }, + victimId: { + type: DataTypes.INTEGER, + allowNull: false, + }, + parameters: { + type: DataTypes.JSON, + allowNull: true, + }, + result: { + type: DataTypes.JSON, + allowNull: true, + } +}, { + sequelize, + modelName: 'Underground', + tableName: 'underground', + schema: 'falukant_data', + timestamps: true, + underscored: true, +}); + +export default Underground; diff --git a/backend/models/falukant/type/underground.js b/backend/models/falukant/type/underground.js new file mode 100644 index 0000000..44fef83 --- /dev/null +++ b/backend/models/falukant/type/underground.js @@ -0,0 +1,25 @@ +import { Model, DataTypes } from 'sequelize'; +import { sequelize } from '../../../utils/sequelize.js'; + +class UndergroundType extends Model { } + +UndergroundType.init({ + tr: { + type: DataTypes.STRING, + allowNull: false, + unique: true, + }, + cost: { + type: DataTypes.INTEGER, + allowNull: false, + } +}, { + sequelize, + modelName: 'UndergroundType', + tableName: 'underground', + schema: 'falukant_type', + timestamps: false, + underscored: true, +}); + +export default UndergroundType; diff --git a/backend/models/index.js b/backend/models/index.js index 8e44802..81927aa 100644 --- a/backend/models/index.js +++ b/backend/models/index.js @@ -96,6 +96,8 @@ import Vote from './falukant/data/vote.js'; import ElectionResult from './falukant/data/election_result.js'; import PoliticalOfficeHistory from './falukant/log/political_office_history.js'; import ElectionHistory from './falukant/log/election_history.js'; +import UndergroundType from './falukant/type/underground.js'; +import Underground from './falukant/data/underground.js'; const models = { SettingsType, @@ -182,8 +184,6 @@ const models = { Credit, DebtorsPrism, HealthActivity, - - // Politics PoliticalOfficeType, PoliticalOfficeRequirement, PoliticalOfficeBenefitType, @@ -195,6 +195,8 @@ const models = { ElectionResult, PoliticalOfficeHistory, ElectionHistory, + UndergroundType, + Underground, }; export default models; diff --git a/backend/routers/falukantRouter.js b/backend/routers/falukantRouter.js index 91a94d8..214cf72 100644 --- a/backend/routers/falukantRouter.js +++ b/backend/routers/falukantRouter.js @@ -69,5 +69,7 @@ router.post('/politics/elections', falukantController.vote); router.get('/politics/open', falukantController.getOpenPolitics); router.post('/politics/open', falukantController.applyForElections); router.get('/cities', falukantController.getRegions); +router.get('/underground/types', falukantController.getUndergroundTypes); +router.get('/notifications', falukantController.getNotifications); export default router; diff --git a/backend/services/falukantService.js b/backend/services/falukantService.js index 29a7b75..a2e5133 100644 --- a/backend/services/falukantService.js +++ b/backend/services/falukantService.js @@ -53,6 +53,8 @@ import Candidate from '../models/falukant/data/candidate.js'; import Vote from '../models/falukant/data/vote.js'; import PoliticalOfficePrerequisite from '../models/falukant/predefine/political_office_prerequisite.js'; import PoliticalOfficeHistory from '../models/falukant/log/political_office_history.js'; +import UndergroundType from '../models/falukant/type/underground.js'; +import Notification from '../models/falukant/log/notification.js'; function calcAge(birthdate) { const b = new Date(birthdate); b.setHours(0, 0); @@ -1063,8 +1065,8 @@ class FalukantService extends BaseService { ] }); if (regionUserDirectorProposals.length > 0) { - for (const proposal of regionUserDirectorProposals) { - await DirectorProposal.destroy(); + for (const p of regionUserDirectorProposals) { + await p.destroy(); } } notifyUser(hashedUserId, 'directorchanged'); @@ -1772,7 +1774,7 @@ class FalukantService extends BaseService { } const housePrice = this.housePrice(house); const oldHouse = await UserHouse.findOne({ where: { userId: falukantUser.id } }); - if (falukantUser.money < housePrice) { + if (Number(falukantUser.money) < Number(housePrice)) { throw new Error('notenoughmoney.'); } if (oldHouse) { @@ -2779,6 +2781,20 @@ class FalukantService extends BaseService { return { cost: totalCost }; } + async getUndergroundTypes(hashedUserId) { + const user = await getFalukantUserOrFail(hashedUserId); + const undergroundTypes = await UndergroundType.findAll(); + return undergroundTypes; + } + + async getNotifications(hashedUserId) { + const user = await getFalukantUserOrFail(hashedUserId); + const notifications = await Notification.findAll({ + where: { userId: user.id, shown: false }, + order: [['createdAt', 'DESC']] + }); + return user.notifications; + } } export default new FalukantService(); diff --git a/backend/utils/falukant/initializeFalukantTypes.js b/backend/utils/falukant/initializeFalukantTypes.js index 8374256..d37af91 100644 --- a/backend/utils/falukant/initializeFalukantTypes.js +++ b/backend/utils/falukant/initializeFalukantTypes.js @@ -14,6 +14,7 @@ import BanquetteType from "../../models/falukant/type/banquette.js"; import LearnRecipient from "../../models/falukant/type/learn_recipient.js"; import PoliticalOfficeType from "../../models/falukant/type/political_office_type.js"; import PoliticalOfficePrerequisite from "../../models/falukant/predefine/political_office_prerequisite.js"; +import UndergroundType from "../../models/falukant/type/underground.js"; export const initializeFalukantTypes = async () => { await initializeFalukantTypeRegions(); @@ -29,6 +30,7 @@ export const initializeFalukantTypes = async () => { await initializeLearnerTypes(); await initializePoliticalOfficeTypes(); await initializePoliticalOfficePrerequisites(); + await initializeUndergroundTypes(); }; const regionTypes = []; @@ -48,10 +50,10 @@ const regions = [ { labelTr: "Siebenbachen", regionType: "shire", parentTr: "Groß-Benbach" }, { labelTr: "Bad Homburg", regionType: "county", parentTr: "Siebenbachen" }, { labelTr: "Maintal", regionType: "county", parentTr: "Siebenbachen" }, - { labelTr: "Frankfurt", regionType: "city", parentTr: "Bad Homburg", map: {x: 187, y: 117, w: 10, h:11} }, - { labelTr: "Oberursel", regionType: "city", parentTr: "Bad Homburg", map: {x: 168, y: 121, w: 10, h:11} }, - { labelTr: "Offenbach", regionType: "city", parentTr: "Bad Homburg", map: {x: 171, y: 142, w: 10, h:11} }, - { labelTr: "Königstein", regionType: "city", parentTr: "Maintal", map: {x: 207, y: 124, w: 24, h:18} }, + { labelTr: "Frankfurt", regionType: "city", parentTr: "Bad Homburg", map: { x: 187, y: 117, w: 10, h: 11 } }, + { labelTr: "Oberursel", regionType: "city", parentTr: "Bad Homburg", map: { x: 168, y: 121, w: 10, h: 11 } }, + { labelTr: "Offenbach", regionType: "city", parentTr: "Bad Homburg", map: { x: 171, y: 142, w: 10, h: 11 } }, + { labelTr: "Königstein", regionType: "city", parentTr: "Maintal", map: { x: 207, y: 124, w: 24, h: 18 } }, ]; const relationships = [ @@ -537,6 +539,29 @@ const politicalOfficePrerequisites = [ } ]; +const undergroundTypes = [ + { + "tr": "spyin", + "cost": 3000 + }, + { + "tr": "assassin", + "cost": 5000 + }, + { + "tr": "sabotage", + "cost": 10000 + }, + { + "tr": "corrupt_politician", + "cost": 15000 + }, + { + "tr": "rob", + "cost": 500 + }, +]; + { const giftNames = promotionalGifts.map(g => g.name); const traitNames = characterTraits.map(t => t.name); @@ -777,20 +802,29 @@ export const initializePoliticalOfficeTypes = async () => { export const initializePoliticalOfficePrerequisites = async () => { for (const prereq of politicalOfficePrerequisites) { - // zunächst den OfficeType anhand seines Namens (tr) ermitteln - const office = await PoliticalOfficeType.findOne({ - where: { name: prereq.officeTr } - }); - if (!office) continue; - - // Nun findOrCreate mit dem neuen Spaltennamen: - await PoliticalOfficePrerequisite.findOrCreate({ - where: { office_type_id: office.id }, - defaults: { - office_type_id: office.id, - prerequisite: prereq.prerequisite - } - }); + const office = await PoliticalOfficeType.findOne({ + where: { name: prereq.officeTr } + }); + if (!office) continue; + + await PoliticalOfficePrerequisite.findOrCreate({ + where: { office_type_id: office.id }, + defaults: { + office_type_id: office.id, + prerequisite: prereq.prerequisite + } + }); } - }; - \ No newline at end of file +}; + +export const initializeUndergroundTypes = async () => { + for (const underground of undergroundTypes) { + await UndergroundType.findOrCreate({ + where: { tr: underground.tr }, + defaults: { + tr: underground.tr, + cost: underground.cost + } + }); + } +}; diff --git a/frontend/public/images/icons/falukant/shortmap/bank.png b/frontend/public/images/icons/falukant/shortmap/bank.png new file mode 100644 index 0000000..f3145b1 Binary files /dev/null and b/frontend/public/images/icons/falukant/shortmap/bank.png differ diff --git a/frontend/public/images/icons/falukant/shortmap/church.png b/frontend/public/images/icons/falukant/shortmap/church.png new file mode 100644 index 0000000..7d06334 Binary files /dev/null and b/frontend/public/images/icons/falukant/shortmap/church.png differ diff --git a/frontend/public/images/icons/falukant/shortmap/darknet.png b/frontend/public/images/icons/falukant/shortmap/darknet.png new file mode 100644 index 0000000..29cebea Binary files /dev/null and b/frontend/public/images/icons/falukant/shortmap/darknet.png differ diff --git a/frontend/public/images/icons/falukant/shortmap/directors.png b/frontend/public/images/icons/falukant/shortmap/directors.png new file mode 100644 index 0000000..c9f230c Binary files /dev/null and b/frontend/public/images/icons/falukant/shortmap/directors.png differ diff --git a/frontend/public/images/icons/falukant/shortmap/education.png b/frontend/public/images/icons/falukant/shortmap/education.png new file mode 100644 index 0000000..f551a9c Binary files /dev/null and b/frontend/public/images/icons/falukant/shortmap/education.png differ diff --git a/frontend/public/images/icons/falukant/shortmap/family.png b/frontend/public/images/icons/falukant/shortmap/family.png new file mode 100644 index 0000000..15790c0 Binary files /dev/null and b/frontend/public/images/icons/falukant/shortmap/family.png differ diff --git a/frontend/public/images/icons/falukant/shortmap/guild.png b/frontend/public/images/icons/falukant/shortmap/guild.png new file mode 100644 index 0000000..b9ba87e Binary files /dev/null and b/frontend/public/images/icons/falukant/shortmap/guild.png differ diff --git a/frontend/public/images/icons/falukant/shortmap/health.png b/frontend/public/images/icons/falukant/shortmap/health.png new file mode 100644 index 0000000..4a9d0db Binary files /dev/null and b/frontend/public/images/icons/falukant/shortmap/health.png differ diff --git a/frontend/public/images/icons/falukant/shortmap/house.png b/frontend/public/images/icons/falukant/shortmap/house.png new file mode 100644 index 0000000..57ef340 Binary files /dev/null and b/frontend/public/images/icons/falukant/shortmap/house.png differ diff --git a/frontend/public/images/icons/falukant/shortmap/moneyhistory.png b/frontend/public/images/icons/falukant/shortmap/moneyhistory.png new file mode 100644 index 0000000..e4d88e4 Binary files /dev/null and b/frontend/public/images/icons/falukant/shortmap/moneyhistory.png differ diff --git a/frontend/public/images/icons/falukant/shortmap/nobility.png b/frontend/public/images/icons/falukant/shortmap/nobility.png new file mode 100644 index 0000000..1c803ed Binary files /dev/null and b/frontend/public/images/icons/falukant/shortmap/nobility.png differ diff --git a/frontend/public/images/icons/falukant/shortmap/overview.png b/frontend/public/images/icons/falukant/shortmap/overview.png new file mode 100644 index 0000000..f672881 Binary files /dev/null and b/frontend/public/images/icons/falukant/shortmap/overview.png differ diff --git a/frontend/public/images/icons/falukant/shortmap/politics.png b/frontend/public/images/icons/falukant/shortmap/politics.png new file mode 100644 index 0000000..ba4d45a Binary files /dev/null and b/frontend/public/images/icons/falukant/shortmap/politics.png differ diff --git a/frontend/public/images/icons/falukant/shortmap/reputation.png b/frontend/public/images/icons/falukant/shortmap/reputation.png new file mode 100644 index 0000000..2ab8330 Binary files /dev/null and b/frontend/public/images/icons/falukant/shortmap/reputation.png differ diff --git a/frontend/public/images/icons/falukant/shortmap/towns.png b/frontend/public/images/icons/falukant/shortmap/towns.png new file mode 100644 index 0000000..8c13426 Binary files /dev/null and b/frontend/public/images/icons/falukant/shortmap/towns.png differ diff --git a/frontend/src/components/falukant/BranchSelection.vue b/frontend/src/components/falukant/BranchSelection.vue index 54567e1..8eb04d0 100644 --- a/frontend/src/components/falukant/BranchSelection.vue +++ b/frontend/src/components/falukant/BranchSelection.vue @@ -7,7 +7,7 @@ :columns="branchColumns" v-model="localSelectedBranch" :placeholder="$t('falukant.branch.selection.placeholder')" - @input="updateSelectedBranch" + @update:modelValue="updateSelectedBranch" />
@@ -70,7 +70,6 @@ export default { }, handleCreateBranch() { - // wird ausgelöst, sobald der Dialog onConfirm erfolgreich abschließt this.$emit('createBranch'); }, }, diff --git a/frontend/src/components/falukant/DirectorInfo.vue b/frontend/src/components/falukant/DirectorInfo.vue index 98cf922..42a7685 100644 --- a/frontend/src/components/falukant/DirectorInfo.vue +++ b/frontend/src/components/falukant/DirectorInfo.vue @@ -1,120 +1,141 @@ - - - - - \ No newline at end of file + + async saveSetting(settingKey, value) { + if (!this.director) return; + try { + await apiClient.post(`/api/falukant/director/settings`, { + branchId: this.branchId, + directorId: this.director.id, + settingKey, + value, + }); + } catch (error) { + console.error(`Error saving setting ${settingKey}:`, error); + } + }, + + openNewDirectorDialog() { + console.log('openNewDirectorDialog'); + this.$refs.newDirectorDialog.open(this.branchId); + }, + + fireDirector() { + alert(this.$t('falukant.branch.director.fireAlert')); + }, + + teachDirector() { + alert(this.$t('falukant.branch.director.teachAlert')); + }, + }, +}; + + + \ No newline at end of file diff --git a/frontend/src/components/falukant/StatusBar.vue b/frontend/src/components/falukant/StatusBar.vue index c152193..5fca340 100644 --- a/frontend/src/components/falukant/StatusBar.vue +++ b/frontend/src/components/falukant/StatusBar.vue @@ -10,7 +10,7 @@
diff --git a/frontend/src/i18n/locales/de/falukant.json b/frontend/src/i18n/locales/de/falukant.json index 7c563fb..b9d6407 100644 --- a/frontend/src/i18n/locales/de/falukant.json +++ b/frontend/src/i18n/locales/de/falukant.json @@ -334,7 +334,8 @@ "salary": "Gehalt", "skills": "Wissen", "product": "Produkt", - "knowledge": "Produktwissen" + "knowledge": "Produktwissen", + "hire": "Einstellen" }, "skillKnowledges": { "excelent": "Exzellent", @@ -434,7 +435,8 @@ "type": { "backyard_room": "Hinterhofzimmer", "wooden_house": "Holzhütte", - "straw_hut": "Strohhütte" + "straw_hut": "Strohhütte", + "family_house": "Familienhaus" } }, "nobility": { @@ -675,6 +677,46 @@ "councillor": "Stadtrat", "assessor": "Schätzer" } + }, + "underground": { + "title": "Untergrund", + "tabs": { + "activities": "Aktivitäten", + "attacks": "Angriffe" + }, + "activities": { + "none": "Keine Aktivitäten vorhanden.", + "create": "Neue Aktivität erstellen", + "type": "Aktivitätstyp", + "victim": "Zielperson", + "cost": "Kosten", + "additionalInfo": "Zusätzliche Informationen", + "victimPlaceholder": "Benutzername eingeben", + "sabotageTarget": "Sabotageziel", + "corruptGoal": "Ziel der Korruption" + }, + "attacks": { + "target": "Angreifer", + "date": "Datum", + "success": "Erfolg", + "none": "Keine Angriffe aufgezeichnet." + }, + "types": { + "spyin": "Spionage", + "assassin": "Attentat", + "sabotage": "Sabotage", + "corrupt_politician": "Korruption", + "rob": "Raub" + }, + "targets": { + "house": "Wohnhaus", + "storage": "Lager" + }, + "goals": { + "elect": "Amtseinsetzung", + "taxIncrease": "Steuern erhöhen", + "taxDecrease": "Steuern senken" + } } } } \ No newline at end of file diff --git a/frontend/src/i18n/locales/de/navigation.json b/frontend/src/i18n/locales/de/navigation.json index 62e60c6..454a929 100644 --- a/frontend/src/i18n/locales/de/navigation.json +++ b/frontend/src/i18n/locales/de/navigation.json @@ -11,7 +11,8 @@ "administration": "Verwaltung", "m-chats": { "multiChat": "Multiuser-Chat", - "randomChat": "Zufalls-Singlechat" + "randomChat": "Zufalls-Singlechat", + "eroticChat": "Erotikchat" }, "m-socialnetwork": { "guestbook": "Gästebuch", @@ -20,7 +21,12 @@ "gallery": "Galerie", "blockedUsers": "Blockierte Benutzer", "oneTimeInvitation": "Einmal-Einladungen", - "diary": "Tagebuch" + "diary": "Tagebuch", + "erotic": "Erotik", + "m-erotic": { + "pictures": "Bilder", + "videos": "Videos" + } }, "m-settings": { "homepage": "Startseite", diff --git a/frontend/src/router/falukantRoutes.js b/frontend/src/router/falukantRoutes.js index 0a8235b..c7b615c 100644 --- a/frontend/src/router/falukantRoutes.js +++ b/frontend/src/router/falukantRoutes.js @@ -12,6 +12,7 @@ import BankView from '../views/falukant/BankView.vue'; import DirectorView from '../views/falukant/DirectorView.vue'; import HealthView from '../views/falukant/HealthView.vue'; import PoliticsView from '../views/falukant/PoliticsView.vue'; +import UndergroundView from '../views/falukant/UndergroundView.vue'; const falukantRoutes = [ { @@ -98,6 +99,12 @@ const falukantRoutes = [ component: PoliticsView, meta: { requiresAuth: true } }, + { + path: '/falukant/darknet', + name: 'UndergroundView', + component: UndergroundView, + meta: { requiresAuth: true } + }, ]; export default falukantRoutes; diff --git a/frontend/src/views/falukant/BranchView.vue b/frontend/src/views/falukant/BranchView.vue index 56e821a..c8eca55 100644 --- a/frontend/src/views/falukant/BranchView.vue +++ b/frontend/src/views/falukant/BranchView.vue @@ -1,291 +1,271 @@ - - - - - \ No newline at end of file +} + \ No newline at end of file diff --git a/frontend/src/views/falukant/HealthView.vue b/frontend/src/views/falukant/HealthView.vue index d14521f..72b452b 100644 --- a/frontend/src/views/falukant/HealthView.vue +++ b/frontend/src/views/falukant/HealthView.vue @@ -101,7 +101,7 @@ export default { try { const { data } = await apiClient.get('/api/falukant/health'); this.age = data.age; - this.healthStatus = data.status; + this.healthStatus = data.health; this.measuresTaken = data.history; this.availableMeasures = data.healthActivities; } catch (err) { diff --git a/frontend/src/views/falukant/UndergroundView.vue b/frontend/src/views/falukant/UndergroundView.vue new file mode 100644 index 0000000..b775218 --- /dev/null +++ b/frontend/src/views/falukant/UndergroundView.vue @@ -0,0 +1,343 @@ + + + + + \ No newline at end of file