feat(admin): add items CSV import to data tools

Allow bulk importing items via CSV in the admin data tools
Support static image paths for items imported from CSV
This commit is contained in:
2026-05-05 17:51:38 +08:00
parent 0e2743b469
commit 5b22d788d7
7 changed files with 196 additions and 5 deletions

View File

@@ -1594,6 +1594,23 @@ async function selectImportDataToolsFile(event: Event) {
}
}
async function selectImportItemsCsvFile(event: Event) {
const input = event.target instanceof HTMLInputElement ? event.target : null;
const file = input?.files?.[0];
if (input) {
input.value = '';
}
if (!file) {
return;
}
await run(async () => {
const csv = await file.text();
dataToolsSummary.value = await api.importItemsCsvDataTools(csv);
message.value = t('pages.admin.dataToolItemsCsvImported');
});
}
function closeImportDataToolsModal() {
dataToolImportModalOpen.value = false;
pendingImportBundle.value = null;
@@ -1925,6 +1942,11 @@ onMounted(() => {
</div>
<p class="meta-line">{{ t('pages.admin.dataToolDependencyNote') }}</p>
<p class="meta-line">{{ t('pages.admin.dataToolImportMode') }}</p>
<div class="field">
<label for="data-tools-items-csv-file">{{ t('pages.admin.dataToolItemsCsvFile') }}</label>
<input id="data-tools-items-csv-file" type="file" accept="text/csv,.csv" :disabled="busy || !can('admin.data.import')" @change="selectImportItemsCsvFile" />
</div>
<p class="meta-line">{{ t('pages.admin.dataToolItemsCsvMode') }}</p>
</section>
<section class="data-tool-panel data-tool-panel--danger" :aria-label="t('pages.admin.dataToolWipe')">