This commit is contained in:
2026-07-20 22:36:30 +07:00
parent 34520a95d4
commit 301cfcd61b
17 changed files with 171 additions and 95 deletions
+37 -3
View File
@@ -1,7 +1,9 @@
import { globalIgnores } from 'eslint/config'
import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript'
import pluginVue from 'eslint-plugin-vue'
import skipFormatting from '@vue/eslint-config-prettier/skip-formatting' import skipFormatting from '@vue/eslint-config-prettier/skip-formatting'
import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript'
import { globalIgnores } from 'eslint/config'
import simpleImportSort from 'eslint-plugin-simple-import-sort';
import unusedImports from 'eslint-plugin-unused-imports';
import pluginVue from 'eslint-plugin-vue'
// To allow more languages other than `ts` in `.vue` files, uncomment the following lines: // To allow more languages other than `ts` in `.vue` files, uncomment the following lines:
// import { configureVueProject } from '@vue/eslint-config-typescript' // import { configureVueProject } from '@vue/eslint-config-typescript'
@@ -19,4 +21,36 @@ export default defineConfigWithVueTs(
pluginVue.configs['flat/essential'], pluginVue.configs['flat/essential'],
vueTsConfigs.recommended, vueTsConfigs.recommended,
skipFormatting, skipFormatting,
{
plugins: {
'simple-import-sort': simpleImportSort,
},
rules: {
// Основные правила сортировки
'simple-import-sort/imports': 'error',
'simple-import-sort/exports': 'error',
},
},
{
plugins: {
'unused-imports': unusedImports,
},
rules: {
// Отключаем стандартное правило
'no-unused-vars': 'off',
'@typescript-eslint/no-unused-vars': 'off',
// Включаем правила плагина
'unused-imports/no-unused-imports': 'error', // 🔧 автофикс
'unused-imports/no-unused-vars': [
'warn',
{
vars: 'all',
varsIgnorePattern: '^_',
args: 'after-used',
argsIgnorePattern: '^_',
},
],
},
}
) )
+28
View File
@@ -30,6 +30,8 @@
"@vue/eslint-config-typescript": "^14.9.0", "@vue/eslint-config-typescript": "^14.9.0",
"@vue/tsconfig": "^0.9.1", "@vue/tsconfig": "^0.9.1",
"eslint": "^10.6.0", "eslint": "^10.6.0",
"eslint-plugin-simple-import-sort": "^14.0.0",
"eslint-plugin-unused-imports": "^4.4.1",
"eslint-plugin-vue": "~10.9.2", "eslint-plugin-vue": "~10.9.2",
"jiti": "^2.7.0", "jiti": "^2.7.0",
"naive-ui": "^2.44.1", "naive-ui": "^2.44.1",
@@ -2679,6 +2681,32 @@
} }
} }
}, },
"node_modules/eslint-plugin-simple-import-sort": {
"version": "14.0.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-14.0.0.tgz",
"integrity": "sha512-NUJO0+XFCkk+o5EsAJruTgnfMEpeWrPWeJS15UVF60GgXmqz1BJ9/3hzlvG7lkL8Bubzos5cCLptThbFfPnSMQ==",
"dev": true,
"license": "MIT",
"peerDependencies": {
"eslint": ">=5.0.0"
}
},
"node_modules/eslint-plugin-unused-imports": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.4.1.tgz",
"integrity": "sha512-oZGYUz1X3sRMGUB+0cZyK2VcvRX5lm/vB56PgNNcU+7ficUCKm66oZWKUubXWnOuPjQ8PvmXtCViXBMONPe7tQ==",
"dev": true,
"license": "MIT",
"peerDependencies": {
"@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0",
"eslint": "^10.0.0 || ^9.0.0 || ^8.0.0"
},
"peerDependenciesMeta": {
"@typescript-eslint/eslint-plugin": {
"optional": true
}
}
},
"node_modules/eslint-plugin-vue": { "node_modules/eslint-plugin-vue": {
"version": "10.9.2", "version": "10.9.2",
"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.9.2.tgz", "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.9.2.tgz",
+2
View File
@@ -36,6 +36,8 @@
"@vue/eslint-config-typescript": "^14.9.0", "@vue/eslint-config-typescript": "^14.9.0",
"@vue/tsconfig": "^0.9.1", "@vue/tsconfig": "^0.9.1",
"eslint": "^10.6.0", "eslint": "^10.6.0",
"eslint-plugin-simple-import-sort": "^14.0.0",
"eslint-plugin-unused-imports": "^4.4.1",
"eslint-plugin-vue": "~10.9.2", "eslint-plugin-vue": "~10.9.2",
"jiti": "^2.7.0", "jiti": "^2.7.0",
"naive-ui": "^2.44.1", "naive-ui": "^2.44.1",
+1 -1
View File
@@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { RouterView } from 'vue-router'
import { NConfigProvider, NMessageProvider } from 'naive-ui' import { NConfigProvider, NMessageProvider } from 'naive-ui'
import { darkTheme } from 'naive-ui' import { darkTheme } from 'naive-ui'
import { RouterView } from 'vue-router'
</script> </script>
<template> <template>
+2 -1
View File
@@ -1,4 +1,5 @@
import { useAuthStore } from "@/stores/auth"; import { useAuthStore } from "@/stores/auth";
import { createEveningDetectiveServerClient, type EveningDetectiveServer } from "./generated/crabs/evening_detective_server"; import { createEveningDetectiveServerClient, type EveningDetectiveServer } from "./generated/crabs/evening_detective_server";
import { createHttpHandler } from "./generated/crabs/evening_detective_server/client"; import { createHttpHandler } from "./generated/crabs/evening_detective_server/client";
@@ -30,7 +31,7 @@ function createAuthHttpHandler(
) => { ) => {
try { try {
return await handler(request) return await handler(request)
} catch (error) { } catch {
await refreshTokens() await refreshTokens()
return await handler(request) return await handler(request)
} }
@@ -1,5 +1,5 @@
// Code generated by protoc-gen-typescript-http. DO NOT EDIT. // Code generated by protoc-gen-typescript-http. DO NOT EDIT.
/* eslint-disable camelcase */
// @ts-nocheck // @ts-nocheck
export type PingReq = { export type PingReq = {
@@ -285,8 +285,8 @@ export function createEveningDetectiveServerClient(
handler: RequestHandler handler: RequestHandler
): EveningDetectiveServer { ): EveningDetectiveServer {
return { return {
Ping(request) { // eslint-disable-line @typescript-eslint/no-unused-vars Ping(request) {
const path = `api/test/ping`; // eslint-disable-line quotes const path = `api/test/ping`;
const body = null; const body = null;
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
@@ -302,8 +302,8 @@ export function createEveningDetectiveServerClient(
method: "Ping", method: "Ping",
}) as Promise<PingRsp>; }) as Promise<PingRsp>;
}, },
Echo(request) { // eslint-disable-line @typescript-eslint/no-unused-vars Echo(request) {
const path = `api/test/echo`; // eslint-disable-line quotes const path = `api/test/echo`;
const body = null; const body = null;
const queryParams: string[] = []; const queryParams: string[] = [];
if (request.text) { if (request.text) {
@@ -322,8 +322,8 @@ export function createEveningDetectiveServerClient(
method: "Echo", method: "Echo",
}) as Promise<EchoRsp>; }) as Promise<EchoRsp>;
}, },
Signup(request) { // eslint-disable-line @typescript-eslint/no-unused-vars Signup(request) {
const path = `api/auth/signup`; // eslint-disable-line quotes const path = `api/auth/signup`;
const body = JSON.stringify(request); const body = JSON.stringify(request);
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
@@ -339,8 +339,8 @@ export function createEveningDetectiveServerClient(
method: "Signup", method: "Signup",
}) as Promise<SignupRsp>; }) as Promise<SignupRsp>;
}, },
RefreshPassword(request) { // eslint-disable-line @typescript-eslint/no-unused-vars RefreshPassword(request) {
const path = `api/auth/refresh-password`; // eslint-disable-line quotes const path = `api/auth/refresh-password`;
const body = JSON.stringify(request); const body = JSON.stringify(request);
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
@@ -356,8 +356,8 @@ export function createEveningDetectiveServerClient(
method: "RefreshPassword", method: "RefreshPassword",
}) as Promise<RefreshPasswordRsp>; }) as Promise<RefreshPasswordRsp>;
}, },
Login(request) { // eslint-disable-line @typescript-eslint/no-unused-vars Login(request) {
const path = `api/auth/login`; // eslint-disable-line quotes const path = `api/auth/login`;
const body = JSON.stringify(request); const body = JSON.stringify(request);
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
@@ -373,8 +373,8 @@ export function createEveningDetectiveServerClient(
method: "Login", method: "Login",
}) as Promise<LoginRsp>; }) as Promise<LoginRsp>;
}, },
Refresh(request) { // eslint-disable-line @typescript-eslint/no-unused-vars Refresh(request) {
const path = `api/auth/refresh`; // eslint-disable-line quotes const path = `api/auth/refresh`;
const body = JSON.stringify(request); const body = JSON.stringify(request);
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
@@ -390,8 +390,8 @@ export function createEveningDetectiveServerClient(
method: "Refresh", method: "Refresh",
}) as Promise<RefreshRsp>; }) as Promise<RefreshRsp>;
}, },
GetUsers(request) { // eslint-disable-line @typescript-eslint/no-unused-vars GetUsers(request) {
const path = `api/users`; // eslint-disable-line quotes const path = `api/users`;
const body = null; const body = null;
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
@@ -407,11 +407,11 @@ export function createEveningDetectiveServerClient(
method: "GetUsers", method: "GetUsers",
}) as Promise<GetUsersRsp>; }) as Promise<GetUsersRsp>;
}, },
GetUserById(request) { // eslint-disable-line @typescript-eslint/no-unused-vars GetUserById(request) {
if (!request.id) { if (!request.id) {
throw new Error("missing required field request.id"); throw new Error("missing required field request.id");
} }
const path = `api/users/${request.id}`; // eslint-disable-line quotes const path = `api/users/${request.id}`;
const body = null; const body = null;
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
@@ -427,8 +427,8 @@ export function createEveningDetectiveServerClient(
method: "GetUserById", method: "GetUserById",
}) as Promise<GetUserByIdRsp>; }) as Promise<GetUserByIdRsp>;
}, },
GetMe(request) { // eslint-disable-line @typescript-eslint/no-unused-vars GetMe(request) {
const path = `api/users/me`; // eslint-disable-line quotes const path = `api/users/me`;
const body = null; const body = null;
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
@@ -444,11 +444,11 @@ export function createEveningDetectiveServerClient(
method: "GetMe", method: "GetMe",
}) as Promise<GetMeRsp>; }) as Promise<GetMeRsp>;
}, },
AddUserRole(request) { // eslint-disable-line @typescript-eslint/no-unused-vars AddUserRole(request) {
if (!request.id) { if (!request.id) {
throw new Error("missing required field request.id"); throw new Error("missing required field request.id");
} }
const path = `api/users/${request.id}/role/add`; // eslint-disable-line quotes const path = `api/users/${request.id}/role/add`;
const body = JSON.stringify(request); const body = JSON.stringify(request);
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
@@ -464,11 +464,11 @@ export function createEveningDetectiveServerClient(
method: "AddUserRole", method: "AddUserRole",
}) as Promise<AddUserRoleRsp>; }) as Promise<AddUserRoleRsp>;
}, },
DeleteUserRole(request) { // eslint-disable-line @typescript-eslint/no-unused-vars DeleteUserRole(request) {
if (!request.id) { if (!request.id) {
throw new Error("missing required field request.id"); throw new Error("missing required field request.id");
} }
const path = `api/users/${request.id}/role/delete`; // eslint-disable-line quotes const path = `api/users/${request.id}/role/delete`;
const body = JSON.stringify(request); const body = JSON.stringify(request);
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
@@ -484,8 +484,8 @@ export function createEveningDetectiveServerClient(
method: "DeleteUserRole", method: "DeleteUserRole",
}) as Promise<DeleteUserRoleRsp>; }) as Promise<DeleteUserRoleRsp>;
}, },
GetPermissions(request) { // eslint-disable-line @typescript-eslint/no-unused-vars GetPermissions(request) {
const path = `api/ui/permissions`; // eslint-disable-line quotes const path = `api/ui/permissions`;
const body = null; const body = null;
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
@@ -501,8 +501,8 @@ export function createEveningDetectiveServerClient(
method: "GetPermissions", method: "GetPermissions",
}) as Promise<GetPermissionsRsp>; }) as Promise<GetPermissionsRsp>;
}, },
UploadFile(request) { // eslint-disable-line @typescript-eslint/no-unused-vars UploadFile(request) {
const path = `api/files/upload`; // eslint-disable-line quotes const path = `api/files/upload`;
const body = JSON.stringify(request); const body = JSON.stringify(request);
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
@@ -518,11 +518,11 @@ export function createEveningDetectiveServerClient(
method: "UploadFile", method: "UploadFile",
}) as Promise<UploadFileRsp>; }) as Promise<UploadFileRsp>;
}, },
DownloadFile(request) { // eslint-disable-line @typescript-eslint/no-unused-vars DownloadFile(request) {
if (!request.filename) { if (!request.filename) {
throw new Error("missing required field request.filename"); throw new Error("missing required field request.filename");
} }
const path = `api/files/${request.filename}`; // eslint-disable-line quotes const path = `api/files/${request.filename}`;
const body = null; const body = null;
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
@@ -538,8 +538,8 @@ export function createEveningDetectiveServerClient(
method: "DownloadFile", method: "DownloadFile",
}) as Promise<googleapi_HttpBody>; }) as Promise<googleapi_HttpBody>;
}, },
AddScenario(request) { // eslint-disable-line @typescript-eslint/no-unused-vars AddScenario(request) {
const path = `api/scenario`; // eslint-disable-line quotes const path = `api/scenario`;
const body = JSON.stringify(request); const body = JSON.stringify(request);
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
@@ -555,8 +555,8 @@ export function createEveningDetectiveServerClient(
method: "AddScenario", method: "AddScenario",
}) as Promise<AddScenarioRsp>; }) as Promise<AddScenarioRsp>;
}, },
GetMyScenarios(request) { // eslint-disable-line @typescript-eslint/no-unused-vars GetMyScenarios(request) {
const path = `api/my-scenarios`; // eslint-disable-line quotes const path = `api/my-scenarios`;
const body = null; const body = null;
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
@@ -572,11 +572,11 @@ export function createEveningDetectiveServerClient(
method: "GetMyScenarios", method: "GetMyScenarios",
}) as Promise<GetMyScenariosRsp>; }) as Promise<GetMyScenariosRsp>;
}, },
GetScenario(request) { // eslint-disable-line @typescript-eslint/no-unused-vars GetScenario(request) {
if (!request.id) { if (!request.id) {
throw new Error("missing required field request.id"); throw new Error("missing required field request.id");
} }
const path = `api/scenarios/${request.id}`; // eslint-disable-line quotes const path = `api/scenarios/${request.id}`;
const body = null; const body = null;
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
@@ -592,11 +592,11 @@ export function createEveningDetectiveServerClient(
method: "GetScenario", method: "GetScenario",
}) as Promise<GetScenarioRsp>; }) as Promise<GetScenarioRsp>;
}, },
UpdateScenario(request) { // eslint-disable-line @typescript-eslint/no-unused-vars UpdateScenario(request) {
if (!request.id) { if (!request.id) {
throw new Error("missing required field request.id"); throw new Error("missing required field request.id");
} }
const path = `api/scenarios/${request.id}`; // eslint-disable-line quotes const path = `api/scenarios/${request.id}`;
const body = JSON.stringify(request); const body = JSON.stringify(request);
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
@@ -612,11 +612,11 @@ export function createEveningDetectiveServerClient(
method: "UpdateScenario", method: "UpdateScenario",
}) as Promise<UpdateScenarioRsp>; }) as Promise<UpdateScenarioRsp>;
}, },
DeleteScenario(request) { // eslint-disable-line @typescript-eslint/no-unused-vars DeleteScenario(request) {
if (!request.id) { if (!request.id) {
throw new Error("missing required field request.id"); throw new Error("missing required field request.id");
} }
const path = `api/scenarios/${request.id}`; // eslint-disable-line quotes const path = `api/scenarios/${request.id}`;
const body = null; const body = null;
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
@@ -632,11 +632,11 @@ export function createEveningDetectiveServerClient(
method: "DeleteScenario", method: "DeleteScenario",
}) as Promise<DeleteScenarioRsp>; }) as Promise<DeleteScenarioRsp>;
}, },
AddScenarioPlace(request) { // eslint-disable-line @typescript-eslint/no-unused-vars AddScenarioPlace(request) {
if (!request.id) { if (!request.id) {
throw new Error("missing required field request.id"); throw new Error("missing required field request.id");
} }
const path = `api/scenarios/${request.id}/places`; // eslint-disable-line quotes const path = `api/scenarios/${request.id}/places`;
const body = JSON.stringify(request); const body = JSON.stringify(request);
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
@@ -652,14 +652,14 @@ export function createEveningDetectiveServerClient(
method: "AddScenarioPlace", method: "AddScenarioPlace",
}) as Promise<AddScenarioPlaceRsp>; }) as Promise<AddScenarioPlaceRsp>;
}, },
UpdateScenarioPlace(request) { // eslint-disable-line @typescript-eslint/no-unused-vars UpdateScenarioPlace(request) {
if (!request.id) { if (!request.id) {
throw new Error("missing required field request.id"); throw new Error("missing required field request.id");
} }
if (!request.code) { if (!request.code) {
throw new Error("missing required field request.code"); throw new Error("missing required field request.code");
} }
const path = `api/scenarios/${request.id}/places/${request.code}`; // eslint-disable-line quotes const path = `api/scenarios/${request.id}/places/${request.code}`;
const body = JSON.stringify(request); const body = JSON.stringify(request);
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
@@ -675,14 +675,14 @@ export function createEveningDetectiveServerClient(
method: "UpdateScenarioPlace", method: "UpdateScenarioPlace",
}) as Promise<UpdateScenarioPlaceRsp>; }) as Promise<UpdateScenarioPlaceRsp>;
}, },
DeleteScenarioPlace(request) { // eslint-disable-line @typescript-eslint/no-unused-vars DeleteScenarioPlace(request) {
if (!request.id) { if (!request.id) {
throw new Error("missing required field request.id"); throw new Error("missing required field request.id");
} }
if (!request.code) { if (!request.code) {
throw new Error("missing required field request.code"); throw new Error("missing required field request.code");
} }
const path = `api/scenarios/${request.id}/places/${request.code}`; // eslint-disable-line quotes const path = `api/scenarios/${request.id}/places/${request.code}`;
const body = null; const body = null;
const queryParams: string[] = []; const queryParams: string[] = [];
let uri = path; let uri = path;
+17 -12
View File
@@ -18,17 +18,18 @@ const props = defineProps({
} }
}) })
import { getAuthClient } from '@/api/auth_client';
import { useAuthStore } from '@/stores/auth';
import { useMessage } from 'naive-ui';
import { ref } from 'vue';
import { useRouter } from 'vue-router';
import { NIcon } from 'naive-ui'
import { Key24Regular } from '@vicons/fluent'
import { DoorOpen } from '@vicons/fa' import { DoorOpen } from '@vicons/fa'
import { h } from 'vue' import { Key24Regular } from '@vicons/fluent'
import { DoorFrontFilled } from '@vicons/material' import { DoorFrontFilled } from '@vicons/material'
import { Icon } from '@vicons/utils' import { Icon } from '@vicons/utils'
import { useMessage } from 'naive-ui';
import { NIcon } from 'naive-ui'
import { ref } from 'vue';
import { h } from 'vue'
import { useRouter } from 'vue-router';
import { getAuthClient } from '@/api/auth_client';
import { useAuthStore } from '@/stores/auth';
const authStore = useAuthStore(); const authStore = useAuthStore();
authStore.initFromStorage() authStore.initFromStorage()
@@ -73,16 +74,20 @@ const goToLogout = () => {
<template> <template>
<div class="menu-block"> <div class="menu-block">
<div class="left-group"> <div class="left-group">
<div class="menu-item-block" :class="{ active: props.active == 'office' }" v-if="authStore.hasRole('user')" @click="router.push('/office')"> <div class="menu-item-block" :class="{ active: props.active == 'office' }" v-if="authStore.hasRole('user')"
@click="router.push('/office')">
Кабинет Кабинет
</div> </div>
<div class="menu-item-block" :class="{ active: props.active == 'games' }" v-if="hasPermission('games_page')" @click="router.push('/games')"> <div class="menu-item-block" :class="{ active: props.active == 'games' }" v-if="hasPermission('games_page')"
@click="router.push('/games')">
Игры Игры
</div> </div>
<div class="menu-item-block" :class="{ active: props.active == 'scenarios' }" v-if="hasPermission('scenarios_page')" @click="router.push('/scenarios')"> <div class="menu-item-block" :class="{ active: props.active == 'scenarios' }"
v-if="hasPermission('scenarios_page')" @click="router.push('/scenarios')">
Мои сценарии Мои сценарии
</div> </div>
<div class="menu-item-block" :class="{ active: props.active == 'users' }" v-if="hasPermission('users_page')" @click="router.push('/users')"> <div class="menu-item-block" :class="{ active: props.active == 'users' }" v-if="hasPermission('users_page')"
@click="router.push('/users')">
Пользователи Пользователи
</div> </div>
</div> </div>
+3 -3
View File
@@ -1,10 +1,10 @@
<script setup lang="ts"> <script setup lang="ts">
import { NAutoComplete, NButton, NCard, NCheckbox, NInput, NSpace, NTabPane, NTabs, useMessage } from 'naive-ui'
import { computed, ref } from 'vue' import { computed, ref } from 'vue'
import { NCard, NTabs, NTabPane, NCheckbox, NButton, NSpace, NInput, NAutoComplete, useMessage } from 'naive-ui'
import { useAuthStore } from '@/stores/auth';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { useAuthStore } from '@/stores/auth';
const authStore = useAuthStore(); const authStore = useAuthStore();
const router = useRouter() const router = useRouter()
+3 -2
View File
@@ -1,8 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import { getAuthClient } from '@/api/auth_client';
import { useAuthStore } from '@/stores/auth';
import { ref } from 'vue'; import { ref } from 'vue';
import { getAuthClient } from '@/api/auth_client';
import HeaderMenu from '@/components/HeaderMenu.vue' import HeaderMenu from '@/components/HeaderMenu.vue'
import { useAuthStore } from '@/stores/auth';
const authStore = useAuthStore(); const authStore = useAuthStore();
const client = getAuthClient(); const client = getAuthClient();
+5 -4
View File
@@ -1,9 +1,10 @@
<script setup lang="ts"> <script setup lang="ts">
import type { Application, Door, Key, Place, Scenario } from '@/api/generated/crabs/evening_detective_server'; import { NDynamicInput, NInput, NInputGroup, NSpace, NSwitch } from 'naive-ui'
import { NCard, NModal, NInput, NSpace, NText, NUpload, NUploadDragger, NSwitch, NDynamicInput, NInputGroup } from 'naive-ui'
import type { PropType } from 'vue'; import type { PropType } from 'vue';
import type { Application, Door, Key, Place } from '@/api/generated/crabs/evening_detective_server';
const props = defineProps({ const props = defineProps({
place: { place: {
type: Object as PropType<Place>, type: Object as PropType<Place>,
@@ -15,7 +16,7 @@ const props = defineProps({
} }
}) })
const emit = defineEmits<{ 'update:mode': [value: String] }>() const emit = defineEmits<{ 'update:mode': [value: string] }>()
const updateMode = (mode: string) => { const updateMode = (mode: string) => {
console.log(mode) console.log(mode)
emit('update:mode', mode) emit('update:mode', mode)
@@ -52,7 +53,7 @@ function onCreateKey(): Key {
<div v-if="mode == 'show-editor'" class="place-block show-editor-block" @click="updateMode('edit')"> <div v-if="mode == 'show-editor'" class="place-block show-editor-block" @click="updateMode('edit')">
<p>[{{ props.place.code }}] - {{ props.place.name }}</p> <p>[{{ props.place.code }}] - {{ props.place.name }}</p>
<div class="message-content">{{ props.place.text }}</div> <div class="message-content">{{ props.place.text }}</div>
<p v-for="application in props.place.applications">{{ application.name }}</p> <p v-for="application in props.place.applications" v-bind:key="application.name">{{ application.name }}</p>
</div> </div>
<div v-if="mode == 'edit'" class="place-block"> <div v-if="mode == 'edit'" class="place-block">
+10 -9
View File
@@ -1,15 +1,16 @@
<script setup lang="ts"> <script setup lang="ts">
import { getAuthClient } from '@/api/auth_client'; import { Settings } from '@vicons/carbon'
import type { Application, Door, Key, Place, Scenario } from '@/api/generated/crabs/evening_detective_server'; import { Icon } from '@vicons/utils'
import HeaderMenu from '@/components/HeaderMenu.vue' import { NButton, type UploadFileInfo,useMessage } from 'naive-ui';
import { NButton, useMessage, type UploadFileInfo } from 'naive-ui'; import { NCard,NFlex, NInput, NModal, NSpace, NText, NUpload, NUploadDragger } from 'naive-ui'
import { ref } from 'vue'; import { ref } from 'vue';
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
import { Icon } from '@vicons/utils'
import { Settings } from '@vicons/carbon' import { getAuthClient } from '@/api/auth_client';
import router from '@/router'; import type { Place, Scenario } from '@/api/generated/crabs/evening_detective_server';
import { NCard, NModal, NInput, NSpace, NText, NUpload, NUploadDragger, NFlex, NSwitch, NDynamicInput } from 'naive-ui' import HeaderMenu from '@/components/HeaderMenu.vue'
import PlaceBlock from '@/components/PlaceBlock.vue'; import PlaceBlock from '@/components/PlaceBlock.vue';
import router from '@/router';
const client = getAuthClient(); const client = getAuthClient();
const route = useRoute() const route = useRoute()
@@ -188,7 +189,7 @@ async function deletePlace(place: Place) {
</n-flex> </n-flex>
</PlaceBlock> </PlaceBlock>
<PlaceBlock :place="place" v-model:mode="place.mode" v-for="place in scenario.story?.places"> <PlaceBlock :place="place" v-model:mode="place.mode" v-for="place in scenario.story?.places" v-bind:key="place.code">
<n-flex justify="end"> <n-flex justify="end">
<n-button @click="deletePlace(place)" type="error" ghost>Удалить</n-button> <n-button @click="deletePlace(place)" type="error" ghost>Удалить</n-button>
<n-button @click="cancelUpdatePlace(place)">Отмена</n-button> <n-button @click="cancelUpdatePlace(place)">Отмена</n-button>
+6 -5
View File
@@ -1,11 +1,12 @@
<script setup lang="ts"> <script setup lang="ts">
import { useMessage } from 'naive-ui';
import { NButton, NCard, NInput,NModal } from 'naive-ui'
import { ref } from 'vue';
import { useRouter } from 'vue-router';
import { getAuthClient } from '@/api/auth_client'; import { getAuthClient } from '@/api/auth_client';
import type { Scenario } from '@/api/generated/crabs/evening_detective_server'; import type { Scenario } from '@/api/generated/crabs/evening_detective_server';
import HeaderMenu from '@/components/HeaderMenu.vue' import HeaderMenu from '@/components/HeaderMenu.vue'
import { useMessage } from 'naive-ui';
import { ref } from 'vue';
import { useRouter } from 'vue-router';
import { NCard, NModal, NButton, NInput } from 'naive-ui'
const client = getAuthClient(); const client = getAuthClient();
@@ -53,7 +54,7 @@ getScenarios()
<p class="scenario-title">Создать новый сценарий</p> <p class="scenario-title">Создать новый сценарий</p>
</div> </div>
<div class="scenario-block" v-for="scenario in scenarios" @click="toScenarioEditor(scenario.id!)"> <div class="scenario-block" v-for="scenario in scenarios" @click="toScenarioEditor(scenario.id!)" v-bind:key="scenario.id">
<div class="scenario-image-block scenario-image" <div class="scenario-image-block scenario-image"
:style="{ backgroundImage: `url(${scenario.image})` }"></div> :style="{ backgroundImage: `url(${scenario.image})` }"></div>
<p class="scenario-title">{{ scenario.name }}</p> <p class="scenario-title">{{ scenario.name }}</p>
+1 -1
View File
@@ -1,7 +1,7 @@
import './assets/main.css' import './assets/main.css'
import { createApp } from 'vue'
import { createPinia } from 'pinia' import { createPinia } from 'pinia'
import { createApp } from 'vue'
import App from './App.vue' import App from './App.vue'
import router from './router' import router from './router'
+5 -4
View File
@@ -1,13 +1,14 @@
import { createRouter, createWebHistory } from 'vue-router' import { createRouter, createWebHistory } from 'vue-router'
import GamesView from '../views/GamesView.vue'
import HomeView from '../views/HomeView.vue' import HomeView from '../views/HomeView.vue'
import LoginView from '../views/LoginView.vue' import LoginView from '../views/LoginView.vue'
import OfficeView from '../views/OfficeView.vue' import OfficeView from '../views/OfficeView.vue'
import UserAgreementView from '../views/UserAgreementView.vue'
import PrivacyPolicyView from '../views/PrivacyPolicyView.vue' import PrivacyPolicyView from '../views/PrivacyPolicyView.vue'
import GamesView from '../views/GamesView.vue'
import ScenariosView from '../views/ScenariosView.vue'
import UsersView from '../views/UsersView.vue'
import ScenariosEditorView from '../views/ScenariosEditorView.vue' import ScenariosEditorView from '../views/ScenariosEditorView.vue'
import ScenariosView from '../views/ScenariosView.vue'
import UserAgreementView from '../views/UserAgreementView.vue'
import UsersView from '../views/UsersView.vue'
const router = createRouter({ const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL), history: createWebHistory(import.meta.env.BASE_URL),
+4 -4
View File
@@ -1,8 +1,8 @@
// stores/auth.ts
import { type User } from '@/api/generated/crabs/evening_detective_server';
import { buildClient, getURL } from '@/api/generated/crabs/evening_detective_server/client';
import { defineStore } from 'pinia'; import { defineStore } from 'pinia';
import { ref, computed } from 'vue'; import { computed,ref } from 'vue';
import { type User } from '@/api/generated/crabs/evening_detective_server';
import { buildClient } from '@/api/generated/crabs/evening_detective_server/client';
export const useAuthStore = defineStore('auth', () => { export const useAuthStore = defineStore('auth', () => {
// ===== STATE ===== // ===== STATE =====
+1
View File
@@ -2,6 +2,7 @@
import { Key24Regular } from '@vicons/fluent' import { Key24Regular } from '@vicons/fluent'
import { Icon } from '@vicons/utils' import { Icon } from '@vicons/utils'
import { computed, ref } from 'vue'; import { computed, ref } from 'vue';
import HeaderMenu from '@/components/HeaderMenu.vue' import HeaderMenu from '@/components/HeaderMenu.vue'
const isFoundKey = ref(false) const isFoundKey = ref(false)
+1 -1
View File
@@ -1,7 +1,7 @@
import { fileURLToPath, URL } from 'node:url' import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue' import vue from '@vitejs/plugin-vue'
import { defineConfig } from 'vite'
import vueDevTools from 'vite-plugin-vue-devtools' import vueDevTools from 'vite-plugin-vue-devtools'
// https://vite.dev/config/ // https://vite.dev/config/