makes MyLv more responsive

This commit is contained in:
SimonGschnell
2024-10-29 14:31:20 +01:00
parent b9ccafe9db
commit ff367339ea
8 changed files with 62 additions and 28 deletions
@@ -29,6 +29,7 @@ class Lehre extends FHCAPI_Controller
{
parent::__construct([
'lvStudentenMail' => self::PERM_LOGGED,
'LV' => self::PERM_LOGGED,
]);
@@ -65,6 +66,18 @@ class Lehre extends FHCAPI_Controller
$this->terminateWithSuccess($studentenMails);
}
public function LV($studiensemester_kurzbz, $lehrveranstaltung_id)
{
$this->load->model('education/Lehrveranstaltung_model', 'LehrveranstaltungModel');
$result = $this->LehrveranstaltungModel->getLvsByStudentWithGrades(getAuthUID(), $studiensemester_kurzbz, getUserLanguage(), $lehrveranstaltung_id);
$result = current($this->getDataOrTerminateWithError($result));
$this->terminateWithSuccess($result);
}
@@ -550,10 +550,11 @@ class Lehrveranstaltung_model extends DB_Model
* @param string $student_uid
* @param string $studiensemester_kurzbz
* @param string|null $sprache
* @param number|null $lvid - returns only information about that single lv if the parameter is set
*
* @return stdClass
*/
public function getLvsByStudentWithGrades($student_uid, $studiensemester_kurzbz, $sprache = null)
public function getLvsByStudentWithGrades($student_uid, $studiensemester_kurzbz, $sprache = null, $lvid=null)
{
if ($sprache) {
$sprache_qry = $this->db->compile_binds('SELECT index FROM public.tbl_sprache WHERE sprache = ?', [$sprache]);
@@ -615,6 +616,10 @@ class Lehrveranstaltung_model extends DB_Model
$this->addJoin('campus.vw_student_lehrveranstaltung v', 'lehrveranstaltung_id');
$this->addJoin('public.tbl_studiengang sg', $this->dbTable . '.studiengang_kz = sg.studiengang_kz');
$this->db->where("v.lehreverzeichnis<>''");
if(isset($lvid))
{
$this->db->where("v.lehrveranstaltung_id", $lvid);
}
$this->addJoin('campus.tbl_lvgesamtnote gn', 'gn.lehrveranstaltung_id=v.lehrveranstaltung_id AND gn.student_uid=v.uid AND gn.studiensemester_kurzbz=v.studiensemester_kurzbz', 'LEFT');
$this->addJoin('lehre.tbl_note gnn', 'gn.note=gnn.note', 'LEFT');
+2 -1
View File
@@ -1,7 +1,8 @@
<?php
$includesArray = array(
'title' => 'MyLv',
'customJSModules' => ['public/js/apps/Cis/MyLv/Student.js']
'customJSModules' => ['public/js/apps/Cis/MyLv/Student.js'],
'customCSSs' => ['public/css/components/MyLv.css']
);
$this->load->view('templates/CISVUE-Header', $includesArray);
+4
View File
@@ -0,0 +1,4 @@
.unavailable, .unavailable:hover{
color: #565e647f !important;
cursor: default;
}
+6
View File
@@ -7,4 +7,10 @@ export default {
{ lehreinheit_id: lehreinheit_id }
);
},
getLvInfo(studiensemester_kurzbz, lehrveranstaltung_id) {
return this.$fhcApi.get(
`/api/frontend/v1/Lehre/LV/${studiensemester_kurzbz}/${lehrveranstaltung_id}`
, {}
);
},
}
@@ -36,7 +36,7 @@ export default {
<small>{{semester}}.{{p.t('lehre/semester')}}</small>
</h4>
<div class="row">
<div v-for="lv in lehrveranstaltungen" :key="lv.lehrveranstaltung_id" class="col-sm-4 col-md-3 mb-3">
<div v-for="lv in lehrveranstaltungen" :key="lv.lehrveranstaltung_id" class="col-12 col-md-6 col-xl-4 col-xxl-3 mb-3">
<mylv-semester-studiengang-lv v-bind="lv" class="text-center h-100"></mylv-semester-studiengang-lv>
</div>
</div>
@@ -120,12 +120,12 @@ export default {
<div class="card-body " :style="bodyStyle">
<ul class="list-group border-top-0 border-bottom-0 rounded-0">
<template v-if="menu">
<li type="button" v-for="menuItem in menu" class="list-group-item border-0 ">
<div class="d-flex flex-row">
<li :type="menuItem.c4_link ? 'button' : null" v-for="menuItem in menu" class="list-group-item border-0 ">
<div class="d-flex flex-row" >
<div class="mx-4">
<i :class="menuItem.c4_icon2 ? menuItem.c4_icon2 : 'fa-solid fa-pen-to-square'"></i>
<i :class="[menuItem.c4_icon2 ? menuItem.c4_icon2 : 'fa-solid fa-pen-to-square', !menuItem.c4_link ? 'unavailable' : null ]"></i>
</div>
<a class="text-decoration-none" :class="{'link-secondary':!menuItem.c4_link, 'link-dark':menuItem.c4_link}" :target="menuItem.c4_target" :href="menuItem.c4_link ? menuItem.c4_link : null">
<a class="text-decoration-none text-truncate" :class="{'link-dark':menuItem.c4_link, 'unavailable':!menuItem.c4_link}" :target="menuItem.c4_target" :href="menuItem.c4_link ? menuItem.c4_link : null">
{{menuItem.name}}
</a>
</div>
@@ -3,30 +3,18 @@
const infos = {};
export default {
props: {
lehrveranstaltung_id: Number,
bezeichnung: String,
studiengang_kuerzel: String,
semester: Number,
props:{
studien_semester: String,
orgform_kurzbz: String,
sprache: String,
ects: Number,
incoming: Number,
/*
* NOTE(chris):
* Hack to expose in "emits" declared events to $props which we use
* in the v-bind directive to forward all events.
* @see: https://github.com/vuejs/core/issues/3432
*/
onHideBsModal: Function,
onHiddenBsModal: Function,
onHidePreventedBsModal: Function,
onShowBsModal: Function,
onShownBsModal: Function
lehrveranstaltung_id: Number,
},
data: () => ({
bezeichnung: null,
studiengang_kuerzel: null,
semester: null,
orgform_kurzbz: null,
sprache: null,
ects: null,
incoming: null,
result: true,
info: null,
}),
@@ -61,10 +49,27 @@ export default {
}
},
created() {
this.$fhcApi.factory.lehre.getLvInfo(this.studien_semester, this.lehrveranstaltung_id)
.then(
res => res.data
).then(data =>{
Object.assign(this,
{
bezeichnung : data.bezeichnung,
studiengang_kuerzel: data.studiengang_kuerzel,
semester: data.semester,
orgform_kurzbz: data.orgform_kurzbz,
sprache: data.sprache,
ects: data.ects,
incoming: data.incoming ?? '-',
});
})
if (infos[this.lehrveranstaltung_id]) {
this.info = infos[this.lehrveranstaltung_id];
} else {
axios.get(FHC_JS_DATA_STORAGE_OBJECT.app_root + FHC_JS_DATA_STORAGE_OBJECT.ci_router + '/components/Cis/Mylv/Info/' + this.studien_semester + '/' + this.lehrveranstaltung_id).then(res => {
this.info = infos[this.lehrveranstaltung_id] = res.data.retval || [];
}).catch(() => this.info = {});
}