108 lines
3.0 KiB
TypeScript
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');
|
|
}
|