Files
KintoneAppBuilder/frontend/src/stores/useAppStore.ts
2025-02-26 19:41:55 +08:00

108 lines
3.0 KiB
TypeScript

import { defineStore } from 'pinia';
import { api } from 'boot/axios';
import { IAppDisplay, IAppVersion, IAppVersionDisplay, IManagedApp, IVersionSubmit } from 'src/types/AppTypes';
import { date, Notify } from 'quasar'
import { userToUserDisplay } from './useUserStore';
export const useAppStore = defineStore('app', {
state: () => ({
apps: [] as IAppDisplay[],
rowIds: new Set<string>(),
}),
actions: {
async loadApps() {
this.reset();
try {
const { data } = await api.get('api/apps');
this.apps = data.data.map((item: IManagedApp) => {
this.rowIds.add(item.appid);
return appToAppDisplay(item)
}).sort((a: IAppDisplay, b: IAppDisplay) => a.sortId - b.sortId); // set default order
} catch (error) {
Notify.create({
icon: 'error',
color: 'negative',
message: 'アプリ一覧の読み込みに失敗しました'
})
}
},
getAppById(id: string) {
if (!this.rowIds.has(id)) {
return null;
}
return this.apps.find((item: IAppDisplay) => item.id === id);
},
async deleteApp(app: IAppDisplay) {
try {
await api.delete(`api/apps/${app.id}`);
} catch (error) {
console.error(error);
Notify.create({
icon: 'error',
color: 'negative',
message: 'アプリの削除に失敗しました'
});
return false;
}
return true;
},
async getVersionsByAppId(app: IAppDisplay) {
const { data } = await api.get(`api/appversions/${app.id}`);
return data.data.map((item: IAppVersion) => versionToVersionDisplay(item));
},
async changeVersion(app: IAppDisplay, version: IAppVersionDisplay) {
await api.put(`api/appversions/${app.id}/${version.id}`);
},
async createVersion(versionSubmit: IVersionSubmit) {
await api.post('api/apps', {
'appid': versionSubmit.appId,
'versionname': versionSubmit.name,
'comment': versionSubmit.comment
})
},
reset() {
this.apps = [];
this.rowIds.clear();
},
},
});
function versionToVersionDisplay(item: IAppVersion) {
return {
id: item.version,
version: item.version,
appid: item.appid,
name: item.versionname,
comment: item.comment,
updater: userToUserDisplay(item.updateuser),
updateTime: formatDate(item.update_time),
creator: userToUserDisplay(item.createuser),
createTime: formatDate(item.create_time),
} as IAppVersionDisplay;
}
function appToAppDisplay(app: IManagedApp) {
return {
id: app.appid,
sortId: parseInt(app.appid, 10),
name: app.appname,
url: `${app.domainurl}/k/${app.appid}`,
version: app.version,
versionName: app.versionname,
updateTime: formatDate(app.update_time),
updateUser: userToUserDisplay(app.updateuser),
versionChanged: app.is_saved
} as IAppDisplay
}
function formatDate(data: string) {
return date.formatDate(new Date(data + 'Z'), 'YYYY/MM/DD HH:mm');
}