feat: web frontend with Alpine.js

This commit is contained in:
2026-08-26 23:36:27 +08:00
parent c59654fcaa
commit c24df57882
5 changed files with 121 additions and 5 deletions
+38 -1
View File
@@ -1 +1,38 @@
// placeholder
function app() {
return {
inboxFiles: [],
outboxFiles: [],
async loadFiles() {
const [inbox, outbox] = await Promise.all([
fetch('/api/files?dir=inbox').then(r => r.json()),
fetch('/api/files?dir=outbox').then(r => r.json())
]);
this.inboxFiles = inbox.files || [];
this.outboxFiles = outbox.files || [];
},
async upload(event, dir) {
const file = event.target.files[0];
const form = new FormData();
form.append('file', file);
form.append('dir', dir);
await fetch('/api/upload', {method: 'POST', body: form});
this.loadFiles();
},
download(id) {
window.location.href = '/api/files/' + id + '/download';
},
async deleteFile(id) {
await fetch('/api/files/' + id, {method: 'DELETE'});
this.loadFiles();
},
async share(id) {
const res = await fetch('/api/files/' + id + '/share', {method: 'POST'});
const data = await res.json();
alert('Share URL: ' + data.url);
},
async logout() {
await fetch('/api/logout', {method: 'POST'});
window.location.href = '/login';
}
};
}