Skip to content

Commit e842eca

Browse files
Dmatrushka19Филипенков Дмитрий АлексеевичBatuevIO
authored
Dropping links inside mini-apps (rating app) (#307)
## Изменения <!-- Опишите здесь на языке, понятном каждому, изменения, сделанные в исходном коде по пунктам. --> Добавлена возможность открытия окна конкретного лектора из внешней ссылки. ## Детали реализации <!-- Здесь можно описать технические детали по пунктам. --> В файле роутера index.ts добавлена возможность чтения данных ссылки (relativePath = lecturer и lecturer_id = xxxx), передача этих данных через query в ApplicationFrame и редирект на основное окно приложения .../apps/yy . В файле ApplicationFrame.vue изменена функция composeUrl, в явном виде добавлено прописывание /lecturer?lecturer_id=xxxx до токена и скоупа. ## Check-List <!-- После сохранения у следующих полей появятся галочки, которые нужно проставить мышкой --> - [x] Вы проверили свой код перед отправкой запроса? - [ ] Вы написали тесты к реализованным функциям? - [ ] Вы не забыли применить форматирование `black` и `isort` для _Back-End_ или `Prettier` для _Front-End_? --------- Co-authored-by: Филипенков Дмитрий Алексеевич <filipenkovda@it.profcomff.com> Co-authored-by: Илья Батуев <ilya-batuev@mail.ru>
1 parent fae9a5e commit e842eca

2 files changed

Lines changed: 43 additions & 1 deletion

File tree

src/router/index.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,30 @@ const routes: RouteRecordRaw[] = [
2020
{
2121
path: '/apps/:id(\\d+)',
2222
component: () => import('@/views/apps/ApplicationFrame.vue'),
23+
props: route => ({
24+
id: Number(route.params.id),
25+
lecturer: route.query.lecturer_id,
26+
relativePath: route.query.relativePath || '',
27+
}),
28+
beforeEnter: route => {
29+
console.log(route.params, route.query);
30+
},
31+
},
32+
33+
{
34+
path: '/apps/44/lecturer',
35+
redirect: to => {
36+
const query = to.query;
37+
const relativePath = to.path.slice(to.path.lastIndexOf('/') + 1);
38+
39+
return {
40+
path: '/apps/44',
41+
query: {
42+
lecturer_id: query.lecturer_id,
43+
relativePath: relativePath,
44+
},
45+
};
46+
},
2347
},
2448
{
2549
path: '/timetable',

src/views/apps/ApplicationFrame.vue

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,18 @@ const router = useRouter();
1616
const profileStore = useProfileStore();
1717
const appStore = useAppsStore();
1818
19+
router.replace({ query: undefined });
20+
21+
const props = defineProps({
22+
lecturer: { type: String, required: false, default: null },
23+
relativePath: { type: String, required: false, default: null },
24+
});
25+
26+
const relPath = props.relativePath;
27+
const lect_id = props.lecturer;
28+
29+
console.log('props: ', props.lecturer, props.relativePath);
30+
1931
enum AppState {
2032
WaitLoad = 1,
2133
Show = 2,
@@ -29,13 +41,18 @@ const appState = ref(AppState.WaitLoad);
2941
const scopes: Ref<string[]> = ref([]);
3042
3143
const scopeNamesToRequest: Ref<string[]> = ref([]);
32-
// const userScopeApproved: Ref<boolean | undefined> = ref();
3344
3445
toolbar.setup({
3546
backUrl: '/apps',
3647
});
3748
3849
const composeUrl = async (url: URL, token: string | null, scopes: string[]) => {
50+
if (relPath) {
51+
url = new URL(relPath, url);
52+
}
53+
if (lect_id) {
54+
url = new URL(`?lecturer_id=${lect_id}`, url);
55+
}
3956
if (token !== null) {
4057
url.searchParams.set('token', token);
4158
}
@@ -125,6 +142,7 @@ const openApp = async (data: ServiceData) => {
125142
appState.value = AppState.Error;
126143
return;
127144
}
145+
128146
url.value = new URL(data.link);
129147
toolbar.title = data.name ?? 'Ошибка';
130148

0 commit comments

Comments
 (0)