ну вроде как все готово НО КТО ЗНАЕТ ЧТО ТАМ ЕЩЕ ПРИДЕТ В ГОЛОВУ ПРОВЕРЯЮЩЕМУ
This commit is contained in:
parent
472a1900a1
commit
a0eb089d1c
@ -1,11 +1,24 @@
|
|||||||
const db = require('../db')
|
const db = require('../db')
|
||||||
|
const crypto = require('crypto');
|
||||||
|
|
||||||
const AbiturControllerInterface = require('./interfaces/abitur.controller.interface')
|
const AbiturControllerInterface = require('./interfaces/abitur.controller.interface')
|
||||||
|
|
||||||
class AbiturController extends AbiturControllerInterface{
|
class AbiturController extends AbiturControllerInterface{
|
||||||
|
|
||||||
async createAbitur(req, res) {
|
async createAbitur(req, res) {
|
||||||
const {first_name, last_name, middle_name} = req.body
|
const {first_name, last_name, middle_name, email, password} = req.body
|
||||||
const newAbitur = await db.query('INSERT INTO abitur (first_name, last_name, middle_name) VALUES ($1, $2, $3) RETURNING *', [first_name, last_name, middle_name])
|
|
||||||
|
var hash = crypto.createHash('md5').update(password).digest('hex');
|
||||||
|
|
||||||
|
const newAbitur = await db.query('INSERT INTO abitur (first_name, last_name, middle_name, email, password) VALUES ($1, $2, $3, $4, $5) RETURNING *', [first_name, last_name, middle_name, email, hash])
|
||||||
|
res.json(newAbitur.rows[0])
|
||||||
|
}
|
||||||
|
async createAbiturWithId(req, res) {
|
||||||
|
const {id, first_name, last_name, middle_name, email, password} = req.body
|
||||||
|
|
||||||
|
var hash = crypto.createHash('md5').update(password).digest('hex');
|
||||||
|
|
||||||
|
const newAbitur = await db.query('INSERT INTO abitur (id, first_name, last_name, middle_name, email, password) VALUES ($1, $2, $3, $4, $5, $6) RETURNING *', [id, first_name, last_name, middle_name, email, hash])
|
||||||
res.json(newAbitur.rows[0])
|
res.json(newAbitur.rows[0])
|
||||||
}
|
}
|
||||||
async getAbiturs(req, res) {
|
async getAbiturs(req, res) {
|
||||||
@ -17,6 +30,13 @@ class AbiturController extends AbiturControllerInterface{
|
|||||||
const abiturs = await db.query('SELECT * FROM abitur WHERE id=$1', [id])
|
const abiturs = await db.query('SELECT * FROM abitur WHERE id=$1', [id])
|
||||||
res.json(abiturs.rows[0])
|
res.json(abiturs.rows[0])
|
||||||
}
|
}
|
||||||
|
async authAbitur(req, res) {
|
||||||
|
const {email, password} = req.body
|
||||||
|
|
||||||
|
var hash = crypto.createHash('md5').update(password).digest('hex');
|
||||||
|
const abitur = await db.query('SELECT * FROM abitur WHERE email = $1 AND password = $2', [email, hash])
|
||||||
|
res.json(abitur.rows[0])
|
||||||
|
}
|
||||||
async updateAbitur(req, res) {
|
async updateAbitur(req, res) {
|
||||||
const {id, first_name, last_name, middle_name} = req.body
|
const {id, first_name, last_name, middle_name} = req.body
|
||||||
const newAbitur = await db.query('UPDATE abitur SET first_name=$1, last_name=$2, middle_name=$3 WHERE id=$4 RETURNING *', [first_name, last_name, middle_name, id])
|
const newAbitur = await db.query('UPDATE abitur SET first_name=$1, last_name=$2, middle_name=$3 WHERE id=$4 RETURNING *', [first_name, last_name, middle_name, id])
|
||||||
@ -27,6 +47,10 @@ class AbiturController extends AbiturControllerInterface{
|
|||||||
const abiturs = await db.query('DELETE FROM abitur WHERE id=$1', [id])
|
const abiturs = await db.query('DELETE FROM abitur WHERE id=$1', [id])
|
||||||
res.json(abiturs.rows[0])
|
res.json(abiturs.rows[0])
|
||||||
}
|
}
|
||||||
|
async deleteAll(req, res) {
|
||||||
|
const abiturs = await db.query('DELETE FROM abitur')
|
||||||
|
res.json(abiturs.rows)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = new AbiturController()
|
module.exports = new AbiturController()
|
@ -8,6 +8,11 @@ class ExamResultController extends ExamResultControllerInterface {
|
|||||||
const newExamResult = await db.query('INSERT INTO exam_result (title, result, abitur_id) VALUES ($1, $2, $3) RETURNING *', [title, result, abitur_id])
|
const newExamResult = await db.query('INSERT INTO exam_result (title, result, abitur_id) VALUES ($1, $2, $3) RETURNING *', [title, result, abitur_id])
|
||||||
res.json(newExamResult.rows[0])
|
res.json(newExamResult.rows[0])
|
||||||
}
|
}
|
||||||
|
async createExamResultWithId(req, res) {
|
||||||
|
const {id, title, result, abitur_id} = req.body
|
||||||
|
const newExamResult = await db.query('INSERT INTO exam_result (id, title, result, abitur_id) VALUES ($1, $2, $3, $4) RETURNING *', [id, title, result, abitur_id])
|
||||||
|
res.json(newExamResult.rows[0])
|
||||||
|
}
|
||||||
async getExamResults(req, res) {
|
async getExamResults(req, res) {
|
||||||
const results = await db.query('SELECT * FROM exam_result')
|
const results = await db.query('SELECT * FROM exam_result')
|
||||||
res.json(results.rows)
|
res.json(results.rows)
|
||||||
@ -32,6 +37,11 @@ class ExamResultController extends ExamResultControllerInterface {
|
|||||||
const results = await db.query('SELECT * FROM exam_result WHERE abitur_id=$1', [id])
|
const results = await db.query('SELECT * FROM exam_result WHERE abitur_id=$1', [id])
|
||||||
res.json(results.rows)
|
res.json(results.rows)
|
||||||
}
|
}
|
||||||
|
async getAverageResultBySpecialization(req, res) {
|
||||||
|
const id = req.params.id
|
||||||
|
const result = await db.query('select avg(result) from exam_result where id in (select exam_result_id from request_exam_result where request_id in (select id from request where specialization_id = $1))', [id])
|
||||||
|
res.json(result.rows[0])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = new ExamResultController()
|
module.exports = new ExamResultController()
|
@ -8,6 +8,11 @@ class RequestController extends RequestControllerInterface {
|
|||||||
const newRequest = await db.query('INSERT INTO request (abitur_id, education_form_id, specialization_id, date) VALUES ($1, $2, $3, $4) RETURNING *', [abitur_id, education_form_id, specialization_id, new Date()])
|
const newRequest = await db.query('INSERT INTO request (abitur_id, education_form_id, specialization_id, date) VALUES ($1, $2, $3, $4) RETURNING *', [abitur_id, education_form_id, specialization_id, new Date()])
|
||||||
res.json(newRequest.rows[0])
|
res.json(newRequest.rows[0])
|
||||||
}
|
}
|
||||||
|
async createRequestWithId(req, res) {
|
||||||
|
const {id, abitur_id, education_form_id, specialization_id} = req.body
|
||||||
|
const newRequest = await db.query('INSERT INTO request (id, abitur_id, education_form_id, specialization_id, date) VALUES ($1, $2, $3, $4, $5) RETURNING *', [id, abitur_id, education_form_id, specialization_id, new Date()])
|
||||||
|
res.json(newRequest.rows[0])
|
||||||
|
}
|
||||||
async getRequests(req, res) {
|
async getRequests(req, res) {
|
||||||
const requests = await db.query('SELECT * FROM request')
|
const requests = await db.query('SELECT * FROM request')
|
||||||
res.json(requests.rows)
|
res.json(requests.rows)
|
||||||
@ -32,6 +37,11 @@ class RequestController extends RequestControllerInterface {
|
|||||||
const requests = await db.query('SELECT * FROM request WHERE abitur_id=$1', [id])
|
const requests = await db.query('SELECT * FROM request WHERE abitur_id=$1', [id])
|
||||||
res.json(requests.rows)
|
res.json(requests.rows)
|
||||||
}
|
}
|
||||||
|
async getCountBySpec(req, res) {
|
||||||
|
const id = req.params.id
|
||||||
|
const requests = await db.query('SELECT COUNT(*) FROM request WHERE specialization_id=$1', [id])
|
||||||
|
res.json(requests.rows[0])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = new RequestController()
|
module.exports = new RequestController()
|
@ -5,7 +5,7 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"serve": "vue-cli-service serve",
|
"serve": "vue-cli-service serve",
|
||||||
"build": "vue-cli-service build",
|
"build": "vue-cli-service build",
|
||||||
"start": "pm2 start index.js --watch"
|
"start": "pm2 start index.js"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^1.3.4",
|
"axios": "^1.3.4",
|
||||||
|
@ -4,9 +4,12 @@ const router = new Router()
|
|||||||
const abiturController = require('../controllers/abitur.controller')
|
const abiturController = require('../controllers/abitur.controller')
|
||||||
|
|
||||||
router.post('/abitur', abiturController.createAbitur)
|
router.post('/abitur', abiturController.createAbitur)
|
||||||
|
router.post('/abitur/manual', abiturController.createAbiturWithId)
|
||||||
router.get('/abitur', abiturController.getAbiturs)
|
router.get('/abitur', abiturController.getAbiturs)
|
||||||
router.get('/abitur/:id', abiturController.getOneAbitur)
|
router.get('/abitur/:id', abiturController.getOneAbitur)
|
||||||
|
router.post('/abitur/auth/', abiturController.authAbitur)
|
||||||
router.put('/abitur', abiturController.updateAbitur)
|
router.put('/abitur', abiturController.updateAbitur)
|
||||||
router.delete('/abitur/:id', abiturController.deleteAbitur)
|
router.delete('/abitur/:id', abiturController.deleteAbitur)
|
||||||
|
router.delete('/abitur', abiturController.deleteAll)
|
||||||
|
|
||||||
module.exports = router
|
module.exports = router
|
@ -4,10 +4,12 @@ const router = new Router()
|
|||||||
const examResultController = require('../controllers/examresult.controller')
|
const examResultController = require('../controllers/examresult.controller')
|
||||||
|
|
||||||
router.post('/examresult', examResultController.createExamResult)
|
router.post('/examresult', examResultController.createExamResult)
|
||||||
|
router.post('/examresult/manual', examResultController.createExamResultWithId)
|
||||||
router.get('/examresult', examResultController.getExamResults)
|
router.get('/examresult', examResultController.getExamResults)
|
||||||
router.get('/examresult/:id', examResultController.getOneExamResult)
|
router.get('/examresult/:id', examResultController.getOneExamResult)
|
||||||
router.put('/examresult', examResultController.updateExamResult)
|
router.put('/examresult', examResultController.updateExamResult)
|
||||||
router.delete('/examresult/:id', examResultController.deleteExamResult)
|
router.delete('/examresult/:id', examResultController.deleteExamResult)
|
||||||
router.get('/examresult/abitur/:id', examResultController.getAbiturExamResults)
|
router.get('/examresult/abitur/:id', examResultController.getAbiturExamResults)
|
||||||
|
router.get('/examresult/avgBySpec/:id', examResultController.getAverageResultBySpecialization)
|
||||||
|
|
||||||
module.exports = router
|
module.exports = router
|
@ -4,10 +4,12 @@ const router = new Router()
|
|||||||
const requestController = require('../controllers/request.controller')
|
const requestController = require('../controllers/request.controller')
|
||||||
|
|
||||||
router.post('/request', requestController.createRequest)
|
router.post('/request', requestController.createRequest)
|
||||||
|
router.post('/request/manual', requestController.createRequestWithId)
|
||||||
router.get('/request', requestController.getRequests)
|
router.get('/request', requestController.getRequests)
|
||||||
router.get('/request/:id', requestController.getRequests)
|
router.get('/request/:id', requestController.getOneRequest)
|
||||||
router.put('/request', requestController.updateRequest)
|
router.put('/request', requestController.updateRequest)
|
||||||
router.delete('/request/:id', requestController.deleteRequest)
|
router.delete('/request/:id', requestController.deleteRequest)
|
||||||
router.get('/request/abitur/:id', requestController.getAbiturRequests)
|
router.get('/request/abitur/:id', requestController.getAbiturRequests)
|
||||||
|
router.get('/request/spec/:id', requestController.getCountBySpec)
|
||||||
|
|
||||||
module.exports = router
|
module.exports = router
|
@ -1,4 +1,6 @@
|
|||||||
<template lang="">
|
<template lang="">
|
||||||
|
<div class='text-end me-3'><a href="http://localhost:8081" class='text-decoration-none'>Выход</a></div>
|
||||||
|
|
||||||
<router-view></router-view>
|
<router-view></router-view>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
@ -1,9 +1,21 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class='text-center mx-auto m-3'>
|
<div class='text-center mx-auto m-3 w-50'>
|
||||||
<p class='h3'>
|
<p class='h3'>
|
||||||
Здравствуйте, {{this.firstName}} {{this.lastName}}
|
Здравствуйте, {{this.firstName}} {{this.lastName}}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Добавить логин и пароль для абитуриента при регистрации и авторизации (хранить в бд) done!
|
||||||
|
Добавить уведомления при регистрации и авторизации done!
|
||||||
|
Добавить секретную страничку для админа с отчетом
|
||||||
|
Добавить отчет
|
||||||
|
Добавить генерацию данных для отчета и замер запроса для отчета
|
||||||
|
При выборе предметов во время создания заявки сделать более удобный выбор предметов и их добавление done!
|
||||||
|
Шифровка пароля done!
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<p class='h5'>Мои результаты:</p>
|
<p class='h5'>Мои результаты:</p>
|
||||||
<ul class='text-start'>
|
<ul class='text-start'>
|
||||||
<li v-for='result in examResults'>
|
<li v-for='result in examResults'>
|
||||||
@ -51,7 +63,7 @@
|
|||||||
<ul class='text-start'>
|
<ul class='text-start'>
|
||||||
<li v-for='request in requests'>
|
<li v-for='request in requests'>
|
||||||
<p>
|
<p>
|
||||||
Дата: {{ request['date']}}
|
Дата: {{ request['date'].slice(0,10)}}
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<button @click="onRequestButtonClick(request['id'])" type="button" class="btn btn-warning ms-3" >
|
<button @click="onRequestButtonClick(request['id'])" type="button" class="btn btn-warning ms-3" >
|
||||||
@ -108,12 +120,15 @@ export default {
|
|||||||
|
|
||||||
async onAddExamResultClick() {
|
async onAddExamResultClick() {
|
||||||
if (this.selectedExamTitle == 'Выберите предмет') return;
|
if (this.selectedExamTitle == 'Выберите предмет') return;
|
||||||
|
for(const res of this.examResults) {
|
||||||
|
if (res['title'] == this.selectedExamTitle) return
|
||||||
|
}
|
||||||
let data = JSON.stringify({
|
let data = JSON.stringify({
|
||||||
"title": this.selectedExamTitle,
|
"title": this.selectedExamTitle,
|
||||||
"result": this.selectedExamResult,
|
"result": this.selectedExamResult,
|
||||||
"abitur_id": this.abiturId
|
"abitur_id": this.abiturId
|
||||||
});
|
});
|
||||||
|
console.log(data)
|
||||||
let config = {
|
let config = {
|
||||||
method: 'post',
|
method: 'post',
|
||||||
maxBodyLength: Infinity,
|
maxBodyLength: Infinity,
|
||||||
|
@ -1,22 +1,31 @@
|
|||||||
<template lang="">
|
<template lang="">
|
||||||
<div class='text-center mx-auto'>
|
<div class='text-center mx-auto'>
|
||||||
|
<form onsubmit="return false">
|
||||||
<p class='h3 m-3'>Авторизация</p>
|
<p class='h3 m-3'>Авторизация</p>
|
||||||
<p class='h6 m-3'> Имя:</p>
|
<p class='h6 m-3'> Имя:</p>
|
||||||
<textarea v-model='firstName' id="firstNameTF" cols="30" rows="1" style="resize: none;"></textarea>
|
<input v-model='firstName' id="firstNameTF" required>
|
||||||
<p class='h6 m-3' > Фамилия:</p>
|
<p class='h6 m-3'> Фамилия:</p>
|
||||||
<textarea v-model='lastName' id="lastNameTF" cols="30" rows="1" style="resize: none;"></textarea>
|
<input v-model='lastName' id="lastNameTF" required>
|
||||||
<p class='h6 m-3'> Отчество:</p>
|
<p class='h6 m-3'> Отчество:</p>
|
||||||
<textarea v-model='middleName' id="middleNameTF" cols="30" rows="1" style="resize: none;"></textarea>
|
<input v-model='middleName' id="middleNameTF">
|
||||||
|
<p class='h6 m-3'> Эл. почта:</p>
|
||||||
|
<input v-model='email' id="emailTF" required>
|
||||||
|
<p class='h6 m-3'> Пароль:</p>
|
||||||
|
<input v-model='password' id="passwordTF" required>
|
||||||
|
|
||||||
|
<p class="h6 m-3">{{message}}</p>
|
||||||
|
|
||||||
<p class='mt-5'>
|
<p class='mt-5'>
|
||||||
<button v-on:click="enterButtonClick" type='button' class='btn btn-primary'>Войти</button>
|
<button v-on:click="enterButtonClick" type='button' class='btn btn-primary'>Войти</button>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<button v-on:click="registerButtonClick" type='button' class='btn btn-success'>Регистрация</button>
|
<button v-on:click="registerButtonClick" type='submit' class='btn btn-success'>Регистрация</button>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<button type='button' class='btn btn-light'>Войти как администратор</button>
|
<button v-on:click="testButtonClick" type='button' class='btn btn-light'>Войти как тестировщик</button>
|
||||||
</p>
|
</p>
|
||||||
|
</form>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
@ -28,33 +37,36 @@ export default {
|
|||||||
firstName: '',
|
firstName: '',
|
||||||
lastName: '',
|
lastName: '',
|
||||||
middleName: '',
|
middleName: '',
|
||||||
abiturId: -1
|
email: '',
|
||||||
|
password: '',
|
||||||
|
abiturId: -1,
|
||||||
|
message: ''
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async enterButtonClick() {
|
enterButtonClick() {
|
||||||
var abiturs = await (await axios.get('http://127.0.0.1:8080/api/abitur', )).data
|
|
||||||
abiturs.forEach(element => {
|
|
||||||
if (element['first_name'] == this.firstName && element['last_name'] == this.lastName && element['middle_name'] == this.middleName) {
|
|
||||||
this.abiturId = element['id']
|
|
||||||
console.log(this.abiturId)
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this.$router.push(
|
this.$router.push(
|
||||||
{
|
{
|
||||||
name: "AbiturMain",
|
name: "Enter"
|
||||||
params: {
|
|
||||||
abiturId: this.abiturId
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
async registerButtonClick() {
|
testButtonClick(){
|
||||||
|
this.$router.push(
|
||||||
|
{
|
||||||
|
name: "Test"
|
||||||
|
}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
registerButtonClick() {
|
||||||
let data = JSON.stringify({
|
let data = JSON.stringify({
|
||||||
"first_name": this.firstName,
|
"first_name": this.firstName,
|
||||||
"last_name": this.lastName,
|
"last_name": this.lastName,
|
||||||
"middle_name": this.middleName
|
"middle_name": this.middleName,
|
||||||
|
"email": this.email,
|
||||||
|
"password": this.password
|
||||||
});
|
});
|
||||||
|
|
||||||
let config = {
|
let config = {
|
||||||
@ -71,7 +83,18 @@ export default {
|
|||||||
.then((response) => {
|
.then((response) => {
|
||||||
this.abiturId =response.data['id']
|
this.abiturId =response.data['id']
|
||||||
console.log(this.abiturId)
|
console.log(this.abiturId)
|
||||||
|
if (this.abiturId>0) {
|
||||||
|
this.message = 'Успешная регистрация'
|
||||||
|
this.$router.push(
|
||||||
|
{
|
||||||
|
name: "Enter"
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else this.message = 'Ошибка при регистрации'
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if (this.message == "") this.message = 'Ошибка при регистрации'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
74
abitur_list_client/src/components/Enter.vue
Normal file
74
abitur_list_client/src/components/Enter.vue
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
<template lang="">
|
||||||
|
<div class='text-center mx-auto'>
|
||||||
|
<p class='h3 m-3'>Вход в аккаунт</p>
|
||||||
|
<p class='h6 m-3'> Эл. почта:</p>
|
||||||
|
<input v-model='email' id="emailTF" required>
|
||||||
|
<p class='h6 m-3'> Пароль:</p>
|
||||||
|
<input v-model='password' id="passwordTF" required>
|
||||||
|
<p class="h6 m-3">{{message}}</p>
|
||||||
|
|
||||||
|
<p class='mt-5'>
|
||||||
|
<button v-on:click="enterButtonClick" type='button' class='btn btn-primary'>Войти</button>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import axios from 'axios'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
email: '',
|
||||||
|
password: '',
|
||||||
|
abiturId: -1,
|
||||||
|
message: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
async enterButtonClick() {
|
||||||
|
|
||||||
|
const axios = require('axios');
|
||||||
|
let data = JSON.stringify({
|
||||||
|
"email": this.email,
|
||||||
|
"password": this.password
|
||||||
|
});
|
||||||
|
|
||||||
|
let config = {
|
||||||
|
method: 'post',
|
||||||
|
maxBodyLength: Infinity,
|
||||||
|
url: 'http://127.0.0.1:8080/api/abitur/auth/',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
data : data
|
||||||
|
};
|
||||||
|
|
||||||
|
await axios.request(config)
|
||||||
|
.then((response) => {
|
||||||
|
console.log(JSON.stringify(response.data));
|
||||||
|
this.abiturId = response.data['id']
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
this.message = 'Ошибка при входе в аккаунт'
|
||||||
|
console.log(error);
|
||||||
|
});
|
||||||
|
if (this.abiturId <= 0 || this.abiturId == null) {
|
||||||
|
this.message = 'Ошибка при входе в аккаунт'
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.$router.push(
|
||||||
|
{
|
||||||
|
name: "AbiturMain",
|
||||||
|
params: {
|
||||||
|
abiturId: this.abiturId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="">
|
||||||
|
|
||||||
|
</style>
|
@ -1,26 +1,26 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="text-center m-3">
|
<div class="text-center m-3">
|
||||||
<p class="h3"> Ваша заявка: </p>
|
<p class="h3"> Ваша заявка: </p>
|
||||||
<p class=""> Дата: {{ this.request['date'].slice(0,10) }} </p>
|
<p class=""> Дата: {{ this.request['date'].slice(0,10) ?? ''}} </p>
|
||||||
<div class="h4">
|
<div class="h4">
|
||||||
Специализация:
|
Специализация:
|
||||||
<button class="btn btn-secondary dropdown-toggle" type="button" id="examResult" data-bs-toggle="dropdown" aria-expanded="false">
|
<button class="btn btn-secondary dropdown-toggle" type="button" id="examResult" data-bs-toggle="dropdown" aria-expanded="false">
|
||||||
{{ specialization['title'] }}
|
{{ specialization['title'] ?? '' }}
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu" aria-labelledby="examResult">
|
<ul class="dropdown-menu" aria-labelledby="examResult">
|
||||||
<li v-for="spec in specializations">
|
<li v-for="spec in specializations">
|
||||||
<a class="dropdown-item" href="#" v-on:click="specialization=spec ">{{ spec['title']}}</a>
|
<a class="dropdown-item" href="#" v-on:click="specialization=spec ">{{ spec['title'] ?? ''}}</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="h4">
|
<div class="h4">
|
||||||
Форма обучения:
|
Форма обучения:
|
||||||
<button class="btn btn-secondary dropdown-toggle" type="button" id="examResult" data-bs-toggle="dropdown" aria-expanded="false">
|
<button class="btn btn-secondary dropdown-toggle" type="button" id="examResult" data-bs-toggle="dropdown" aria-expanded="false">
|
||||||
{{ educationForm['title'] }}
|
{{ educationForm['title'] ?? ''}}
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu" aria-labelledby="examResult">
|
<ul class="dropdown-menu" aria-labelledby="examResult">
|
||||||
<li v-for="form in forms">
|
<li v-for="form in forms">
|
||||||
<a class="dropdown-item" href="#" v-on:click="educationForm=form ">{{ form['title']}}</a>
|
<a class="dropdown-item" href="#" v-on:click="educationForm=form ">{{ form['title'] ?? ''}}</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@ -29,10 +29,10 @@
|
|||||||
<ul class='text-start ms-5'>
|
<ul class='text-start ms-5'>
|
||||||
<li v-for='result in results'>
|
<li v-for='result in results'>
|
||||||
<p>
|
<p>
|
||||||
Предмет: {{ result['title']}}
|
Предмет: {{ result['title'] ?? ''}}
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Результат: {{ result['result']}}
|
Результат: {{ result['result'] ?? ''}}
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<button @click="deleteResultClick(result['id'])" type="button" class="btn btn-danger ms-3" >
|
<button @click="deleteResultClick(result['id'])" type="button" class="btn btn-danger ms-3" >
|
||||||
@ -42,8 +42,8 @@
|
|||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<p class="h6"> Добавить результат к заявке </p>
|
<p class="h6"> Добавить ваши результаты к заявке </p>
|
||||||
<div class="dropdown">
|
<!-- <div class="dropdown">
|
||||||
<button class="btn btn-secondary dropdown-toggle" type="button" id="examResult" data-bs-toggle="dropdown" aria-expanded="false">
|
<button class="btn btn-secondary dropdown-toggle" type="button" id="examResult" data-bs-toggle="dropdown" aria-expanded="false">
|
||||||
<div v-if="selectedExamResult == null" >Выберите результат</div>
|
<div v-if="selectedExamResult == null" >Выберите результат</div>
|
||||||
<div v-else>{{ selectedExamResult['title'] }}: {{ selectedExamResult['result'] }} </div>
|
<div v-else>{{ selectedExamResult['title'] }}: {{ selectedExamResult['result'] }} </div>
|
||||||
@ -55,6 +55,14 @@
|
|||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<button type="button" @click="addResultToRequest" class="btn btn-success p-3 ms-5"> Добавить </button>
|
<button type="button" @click="addResultToRequest" class="btn btn-success p-3 ms-5"> Добавить </button>
|
||||||
|
</div> -->
|
||||||
|
<div>
|
||||||
|
<div v-for="res in allResults" >
|
||||||
|
<p>
|
||||||
|
<span class="me-4">{{res['title'] ?? '' }}: {{ res['result'] ?? '' }} баллов</span>
|
||||||
|
<button class="btn btn-info" @click="addResultToRequest(res)">Добавить</button>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<button type="button" @click="saveRequest" class="btn btn-primary p-3 ps-5 pe-5 mt-5">Сохранить</button>
|
<button type="button" @click="saveRequest" class="btn btn-primary p-3 ps-5 pe-5 mt-5">Сохранить</button>
|
||||||
@ -105,14 +113,14 @@ export default {
|
|||||||
window.location.reload()
|
window.location.reload()
|
||||||
},
|
},
|
||||||
|
|
||||||
async addResultToRequest() {
|
async addResultToRequest(res) {
|
||||||
const axios = require('axios');
|
const axios = require('axios');
|
||||||
console.log('Save new result')
|
console.log('Save new result')
|
||||||
console.log(this.requestId)
|
console.log(this.requestId)
|
||||||
console.log(this.selectedExamResult)
|
console.log(res)
|
||||||
var request_result_pairs = (await axios.get('http://127.0.0.1:8080/api/request_examresult/' + this.requestId)).data
|
var request_result_pairs = (await axios.get('http://127.0.0.1:8080/api/request_examresult/' + this.requestId)).data
|
||||||
for (const pair of request_result_pairs) {
|
for (const pair of request_result_pairs) {
|
||||||
if (pair['request_id'] == this.requestId && pair['exam_result_id']==this.selectedExamResult['id']) {
|
if (pair['request_id'] == this.requestId && pair['exam_result_id']==res['id']) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -120,7 +128,7 @@ export default {
|
|||||||
|
|
||||||
let data = JSON.stringify({
|
let data = JSON.stringify({
|
||||||
"request_id": this.requestId,
|
"request_id": this.requestId,
|
||||||
"exam_result_id": this.selectedExamResult['id']
|
"exam_result_id": res['id']
|
||||||
});
|
});
|
||||||
|
|
||||||
let config = {
|
let config = {
|
||||||
@ -181,28 +189,45 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
async beforeMount() {
|
async created() {
|
||||||
// получаем заявку
|
// получаем заявку
|
||||||
this.requestId = this.$route.params.requestId
|
this.requestId = this.$route.params.requestId
|
||||||
this.request = (await axios.get('http://127.0.0.1:8080/api/request/' + this.requestId)).data[0]
|
console.log(this.requestId)
|
||||||
|
this.request = (await axios.get('http://127.0.0.1:8080/api/request/' + this.requestId)).data
|
||||||
|
console.log(this.request)
|
||||||
// получаем ее специализацию и форму обучения
|
// получаем ее специализацию и форму обучения
|
||||||
this.educationForm = (await axios.get('http://127.0.0.1:8080/api/educationform/' + this.request['education_form_id'])).data
|
this.educationForm = (await axios.get('http://127.0.0.1:8080/api/educationform/' + this.request['education_form_id'])).data
|
||||||
console.log(this.educationForm)
|
//console.log(this.educationForm)
|
||||||
this.specialization = (await axios.get('http://127.0.0.1:8080/api/specialization/' + this.request['specialization_id'])).data
|
this.specialization = (await axios.get('http://127.0.0.1:8080/api/specialization/' + this.request['specialization_id'])).data
|
||||||
console.log(this.specialization)
|
console.log(this.specialization)
|
||||||
//получаем закрепленные за заявкой результаты
|
//получаем закрепленные за заявкой результаты
|
||||||
var request_result_pairs = (await axios.get('http://127.0.0.1:8080/api/request_examresult/' + this.requestId)).data
|
var request_result_pairs = (await axios.get('http://127.0.0.1:8080/api/request_examresult/' + this.requestId)).data
|
||||||
var results = []
|
|
||||||
for(const pair of request_result_pairs) {
|
for(const pair of request_result_pairs) {
|
||||||
console.log(pair)
|
//console.log(pair)
|
||||||
results.push((await axios.get('http://127.0.0.1:8080/api/examresult/' + pair['exam_result_id'])).data)
|
this.results.push((await axios.get('http://127.0.0.1:8080/api/examresult/' + pair['exam_result_id'])).data)
|
||||||
}
|
}
|
||||||
this.results = results
|
// console.log(this.results)
|
||||||
//получаем все результаты абитуриента
|
//получаем все результаты абитуриента
|
||||||
this.allResults = (await axios.get('http://127.0.0.1:8080/api/examresult/abitur/' + this.request['abitur_id'])).data
|
var allResults = (await axios.get('http://127.0.0.1:8080/api/examresult/abitur/' + this.request['abitur_id'])).data
|
||||||
|
//console.log(allResults)
|
||||||
|
//
|
||||||
|
|
||||||
|
var flag = true;
|
||||||
|
for (const allRes of allResults) {
|
||||||
|
flag = true;
|
||||||
|
for(const res of this.results) {
|
||||||
|
if (allRes['id'] == res['id'])
|
||||||
|
flag = false
|
||||||
|
}
|
||||||
|
if (flag) {
|
||||||
|
this.allResults.push(allRes)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// получаем все формы обучения и специализации
|
// получаем все формы обучения и специализации
|
||||||
this.specializations = (await axios.get('http://127.0.0.1:8080/api/specialization')).data
|
this.specializations = (await axios.get('http://127.0.0.1:8080/api/specialization')).data
|
||||||
this.forms = (await axios.get('http://127.0.0.1:8080/api/educationform')).data
|
this.forms = (await axios.get('http://127.0.0.1:8080/api/educationform')).data
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
195
abitur_list_client/src/components/TestPage.vue
Normal file
195
abitur_list_client/src/components/TestPage.vue
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
<template>
|
||||||
|
<div class="text-center m-3">
|
||||||
|
<div class="h2 mb-5">Страница с отчетами и прочими приколами</div>
|
||||||
|
<div class="mb-5">
|
||||||
|
<p>Приколы</p>
|
||||||
|
<button class="btn btn-danger mb-2" @click="deleteAllAbiturs">Удалить всех пользователей</button>
|
||||||
|
<p class="fw-bold">{{deleteAllMessage}}</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<p>Средний балл по специализации</p>
|
||||||
|
<button class="btn btn-secondary dropdown-toggle" type="button" id="examResult" data-bs-toggle="dropdown" aria-expanded="false">
|
||||||
|
{{ specialization['title'] ?? '' }}
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu" aria-labelledby="examResult">
|
||||||
|
<li v-for="spec in specializations">
|
||||||
|
<a class="dropdown-item" href="#" v-on:click="specialization=spec">{{ spec['title'] ?? ''}}</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p class="m-5">YOUR DESTINY: {{destiny}}</p>
|
||||||
|
<button class="btn btn-danger" @click="getDestiny"> KNOW YOUR DESTINY </button>
|
||||||
|
</div>
|
||||||
|
<div class="m-3">
|
||||||
|
<button class="btn btn-warning" @click="generateSlaves"> PUSH ME 4 MAGIC</button>
|
||||||
|
<p class="m-3">{{magicMessage}}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import axios from 'axios'
|
||||||
|
export default {
|
||||||
|
data(){
|
||||||
|
return {
|
||||||
|
specializations: [],
|
||||||
|
specialization: null,
|
||||||
|
destiny: 'UNKNOWN',
|
||||||
|
deleteAllMessage: '',
|
||||||
|
magicMessage: 'Magic is not done yet'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async getDestiny() {
|
||||||
|
if (this.specialization == null) return
|
||||||
|
var avg = (await axios.get('http://127.0.0.1:8080/api/examresult/avgBySpec/'+this.specialization['id'])).data
|
||||||
|
console.log(avg['avg'])
|
||||||
|
var count = (await axios.get('http://127.0.0.1:8080/api/request/spec/'+this.specialization['id'])).data
|
||||||
|
console.log(count['count'])
|
||||||
|
if (count == null || avg == null) {
|
||||||
|
this.destiny = 'YOUR DESTINY IS BROKEN. KYS.'
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.destiny = 'COUNT OF REQUESTS: ' + count['count'] + ', AVERAGE SCORE: ' + avg['avg'] + '. GOOD LUCK, BASTARD'
|
||||||
|
},
|
||||||
|
|
||||||
|
async deleteAllAbiturs() {
|
||||||
|
try {
|
||||||
|
console.log('ok')
|
||||||
|
await axios.delete('http://127.0.0.1:8080/api/abitur')
|
||||||
|
this.deleteAllMessage='THEYRE ALL GONE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
|
||||||
|
console.log('still ok')
|
||||||
|
} catch (error) {
|
||||||
|
console.log('bullshit')
|
||||||
|
this.deleteAllMessage='THEY SURVIVED. ITS YOUR FAULT!!!!!!!!!!!!!'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// крч все работать должно, надо просто или прописать отдельные пути с айдишниками, либо в уже существующие добавить айдишники и в контроллерах при наличии айди в параметре заносить его в бд
|
||||||
|
|
||||||
|
|
||||||
|
async generateSlaves() {
|
||||||
|
if (this.specializations == null || this.specialization.length == 0) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
console.log(this.specializations)
|
||||||
|
try {
|
||||||
|
for(const spec of this.specializations) {
|
||||||
|
// создаем бедных студентиков сто штучек оптовая цена
|
||||||
|
console.log('создаем бедных студентиков сто штучек оптовая цена ' + parseInt(spec['id'], 10))
|
||||||
|
for (let abiturNum = 0 + parseInt(spec['id'], 10) * 100; abiturNum < 100 + parseInt(spec['id'], 10) * 100; abiturNum++) {
|
||||||
|
console.log('внутри форика ' + abiturNum)
|
||||||
|
let data = JSON.stringify({
|
||||||
|
"id": abiturNum,
|
||||||
|
"first_name": "Vasya " + abiturNum,
|
||||||
|
"last_name": "Pupkin " + abiturNum,
|
||||||
|
"middle_name": "Vasylyevich " + abiturNum,
|
||||||
|
"email": "mylo" + abiturNum,
|
||||||
|
"password": "parol" + abiturNum
|
||||||
|
});
|
||||||
|
|
||||||
|
let config = {
|
||||||
|
method: 'post',
|
||||||
|
maxBodyLength: Infinity,
|
||||||
|
url: 'http://127.0.0.1:8080/api/abitur/manual',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
data : data
|
||||||
|
};
|
||||||
|
|
||||||
|
await axios.request(config)
|
||||||
|
// как студента с пылу с жару закинули обратно в печь, ему надо дать результаты его писанины три штуки на руки
|
||||||
|
console.log('как студента с пылу с жару закинули обратно в печь, ему надо дать результаты его писанины три штуки на руки')
|
||||||
|
for(let resultNum = 0; resultNum < 3; resultNum++) {
|
||||||
|
console.log('писанина №' + resultNum)
|
||||||
|
let dataResult = JSON.stringify({
|
||||||
|
"id": abiturNum*3 + resultNum,
|
||||||
|
"title": 'Предмет' + resultNum,
|
||||||
|
"result": this.getRandomInt(100),
|
||||||
|
"abitur_id": abiturNum
|
||||||
|
});
|
||||||
|
console.log('завещание составлено')
|
||||||
|
console.log(dataResult)
|
||||||
|
let configResult = {
|
||||||
|
method: 'post',
|
||||||
|
maxBodyLength: Infinity,
|
||||||
|
url: 'http://127.0.0.1:8080/api/examresult/manual',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
data : dataResult
|
||||||
|
};
|
||||||
|
console.log('завещание настроено')
|
||||||
|
await axios.request(configResult)
|
||||||
|
console.log('завещание отправлено')
|
||||||
|
}
|
||||||
|
// теперь студентику будущему добавим заявку на поступление в шарагу местную
|
||||||
|
console.log('теперь студентику будущему добавим заявку на поступление в шарагу местную ')
|
||||||
|
let dataRequest = JSON.stringify({
|
||||||
|
"id": abiturNum,
|
||||||
|
"abitur_id": abiturNum,
|
||||||
|
"education_form_id": 2,
|
||||||
|
"specialization_id": parseInt(spec['id'], 10)
|
||||||
|
});
|
||||||
|
|
||||||
|
let configRequest = {
|
||||||
|
method: 'post',
|
||||||
|
maxBodyLength: Infinity,
|
||||||
|
url: 'http://127.0.0.1:8080/api/request/manual',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
data : dataRequest
|
||||||
|
};
|
||||||
|
|
||||||
|
await axios.request(configRequest)
|
||||||
|
|
||||||
|
// добавим к заявочке результаты писанин и вуаля
|
||||||
|
console.log('добавим к заявочке результаты писанин и вуаля ')
|
||||||
|
for(let resultNum = 0; resultNum < 3; resultNum++) {
|
||||||
|
let dataRecord = JSON.stringify({
|
||||||
|
"request_id": abiturNum,
|
||||||
|
"exam_result_id": abiturNum * 3 + resultNum,
|
||||||
|
});
|
||||||
|
|
||||||
|
let configRecord = {
|
||||||
|
method: 'post',
|
||||||
|
maxBodyLength: Infinity,
|
||||||
|
url: 'http://127.0.0.1:8080/api/request_examresult',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
data : dataRecord
|
||||||
|
};
|
||||||
|
|
||||||
|
await axios.request(configRecord)
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('готово номер ' + spec['id'])
|
||||||
|
}
|
||||||
|
this.magicMessage='MAGIC IS SOOOOOOOOO READY'
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
this.magicMessage='MAGIC IS SOOOOOOOOO FAILED'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
getRandomInt(max) {
|
||||||
|
console.log('matan start')
|
||||||
|
var matan = Math.floor(Math.random() * max);
|
||||||
|
console.log('matan end')
|
||||||
|
return matan
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
|
async created() {
|
||||||
|
this.specializations = (await axios.get('http://127.0.0.1:8080/api/specialization')).data
|
||||||
|
this.specialization = this.specializations[0]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="">
|
||||||
|
|
||||||
|
</style>
|
@ -5,6 +5,8 @@ import { createRouter, createWebHistory } from "vue-router"
|
|||||||
import Auth from './components/Auth'
|
import Auth from './components/Auth'
|
||||||
import AbiturMain from './components/AbiturMain'
|
import AbiturMain from './components/AbiturMain'
|
||||||
import Request from './components/Request'
|
import Request from './components/Request'
|
||||||
|
import Test from './components/TestPage'
|
||||||
|
import Enter from './components/Enter'
|
||||||
|
|
||||||
const routes = [
|
const routes = [
|
||||||
{
|
{
|
||||||
@ -23,6 +25,16 @@ const routes = [
|
|||||||
name: 'Request',
|
name: 'Request',
|
||||||
component: Request,
|
component: Request,
|
||||||
props: true
|
props: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path:'/test',
|
||||||
|
component: Test,
|
||||||
|
name: 'Test'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path:'/enter',
|
||||||
|
component: Enter,
|
||||||
|
name: 'Enter'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user