Small fixes aside (#29)

* version string was not set in correct place
* add new item buttons and edit masks.
* localized reset password form
* common layout
buttons:
Save left green
Cancel right red

* added help-icon
* setting version improved
make the handling to set versions more convenient. Decoupled setting versions, committing files and tagging.
This commit is contained in:
Bardioc26
2026-02-04 22:18:37 +01:00
committed by GitHub
parent 95f0fc0b7a
commit 6943e678a9
20 changed files with 1431 additions and 216 deletions
@@ -8,6 +8,7 @@
v-model="searchTerm"
:placeholder="`${$t('search')} ${$t('WaeponSkill')}...`"
/>
<button @click="startCreate" class="btn-primary">{{ $t('newEntry') }}</button>
</div>
</div>
@@ -47,6 +48,69 @@
</tr>
</thead>
<tbody>
<tr v-if="creatingNew">
<td>New</td>
<td colspan="6">
<div class="edit-form">
<div class="edit-row">
<div class="edit-field">
<label>{{ $t('weaponskill.name') }}:</label>
<input v-model="newItem.name" />
</div>
<div class="edit-field">
<label>{{ $t('weaponskill.difficulty') }}:</label>
<select v-model="newItem.difficulty" style="width:120px;">
<option value="leicht">leicht</option>
<option value="normal">normal</option>
<option value="schwer">schwer</option>
<option value="sehr schwer">sehr schwer</option>
</select>
</div>
<div class="edit-field">
<label>{{ $t('weaponskill.initialwert') }}:</label>
<input v-model.number="newItem.initialwert" type="number" style="width:60px;" />
</div>
</div>
<div class="edit-row">
<div class="edit-field full-width">
<label>{{ $t('weaponskill.description') }}:</label>
<input v-model="newItem.beschreibung" />
</div>
</div>
<div class="edit-row">
<div class="edit-field">
<label>{{ $t('weaponskill.quelle') }}:</label>
<select v-model="newItem.sourceCode" style="width:100px;">
<option value="">-</option>
<option v-for="source in availableSources" :key="source.code" :value="source.code">
{{ source.code }}
</option>
</select>
</div>
<div class="edit-field">
<label>{{ $t('weaponskill.page') || 'Page' }}:</label>
<input v-model.number="newItem.page_number" type="number" style="width:60px;" />
</div>
<div class="edit-field">
<label>{{ $t('weaponskill.system') }}:</label>
<select v-model.number="createSelectedSystemId" style="width:140px;">
<option value="">-</option>
<option v-for="system in systemOptions" :key="system.id" :value="system.id">
{{ system.label }}
</option>
</select>
</div>
</div>
<div class="edit-actions">
<button @click="saveCreate" class="btn-save">{{ $t('common.save') }}</button>
<button @click="cancelCreate" class="btn-cancel">{{ $t('common.cancel') }}</button>
</div>
</div>
</td>
</tr>
<template v-for="(dtaItem, index) in filteredAndSortedWaeponSkills" :key="dtaItem.id">
<tr v-if="editingIndex !== index">
<td>{{ dtaItem.id || '' }}</td>
@@ -57,7 +121,7 @@
<td>{{ formatQuelle(dtaItem) }}</td>
<td>{{ getSystemCodeById(dtaItem.game_system_id, dtaItem.system || 'midgard') }}</td>
<td>
<button @click="startEdit(index)">Edit</button>
<button @click="startEdit(index)">{{ $t('common.edit') }}</button>
</td>
</tr>
<!-- Edit Mode -->
@@ -119,8 +183,8 @@
</div>
<div class="edit-actions">
<button @click="saveEdit(index)" class="btn-save">Save</button>
<button @click="cancelEdit" class="btn-cancel">Cancel</button>
<button @click="saveEdit(index)" class="btn-save">{{ $t('common.save') }}</button>
<button @click="cancelEdit" class="btn-cancel">{{ $t('common.cancel') }}</button>
</div>
</div>
</td>
@@ -211,7 +275,10 @@ export default {
availableSources: [],
availableDifficultiesData: [],
gameSystems: [],
selectedSystemId: null
selectedSystemId: null,
creatingNew: false,
newItem: null,
createSelectedSystemId: null
}
},
async created() {
@@ -345,6 +412,53 @@ export default {
this.editedItem = null
this.selectedSystemId = null
},
startCreate() {
this.cancelEdit()
const defaultSystem = this.gameSystems.find(gs => gs.is_active) || this.gameSystems[0] || null
this.createSelectedSystemId = defaultSystem ? defaultSystem.id : null
this.newItem = {
name: '',
difficulty: 'leicht',
initialwert: 0,
beschreibung: '',
sourceCode: '',
page_number: 0,
system: defaultSystem ? defaultSystem.code : ''
}
this.creatingNew = true
},
cancelCreate() {
this.creatingNew = false
this.newItem = null
this.createSelectedSystemId = null
},
async saveCreate() {
if (!this.newItem) return
try {
const source = this.availableSources.find(s => s.code === this.newItem.sourceCode)
const selectedSystem = this.gameSystems.find(gs => gs.id === this.createSelectedSystemId)
const createData = {
...this.newItem,
category: 'Waffen',
source_id: source ? source.id : null,
page_number: this.newItem.page_number || 0,
system: selectedSystem ? selectedSystem.code : (this.newItem.system || ''),
game_system_id: selectedSystem ? selectedSystem.id : null
}
const response = await API.post(
'/api/maintenance/weaponskills-enhanced',
createData
)
this.enhancedWeaponSkills.push(response.data)
this.cancelCreate()
} catch (error) {
console.error('Failed to create weapon skill:', error)
alert('Failed to create weapon skill: ' + (error.response?.data?.error || error.message))
}
},
findSystemIdByCode(code) {
return findSystemIdByCode(this.gameSystems, code)
},