Compare commits

...

21 Commits

Author SHA1 Message Date
Dhaverd d4e8f3b329 Исправления редизайна 2024-06-14 11:16:31 +08:00
Dhaverd 5f210dfd7c Merge pull request 'mini neon redesign' (#8) from neon-mini-redesign into master
Reviewed-on: http://gitea.dhaverd.ru/Dhaverd/New-site/pulls/8
2024-06-13 12:48:22 +03:00
Dhaverd 48c5937b6e mini neon redesign 2024-06-13 17:45:42 +08:00
Dhaverd d5f2690b54 Yandex Metrika 2024-06-06 16:13:33 +08:00
Dhaverd 42aea0d4c3 Merge pull request 'Забацал фичу с отзывами' (#7) from feature-rating into master
Reviewed-on: http://gitea.dhaverd.ru/Dhaverd/New-site/pulls/7
2024-06-03 12:47:17 +03:00
Dhaverd c6c6ddeb3e Забацал фичу с отзывами 2024-06-03 17:46:20 +08:00
Dhaverd 5c79d92fa1 Перенес фото резюме в папку с картинками + картинки для ссылок в расписании стримов есть локально 2024-06-03 13:43:06 +08:00
Dhaverd 300f027a36 Поправил размер шрифта в Резюме 2024-05-27 10:16:07 +08:00
Dhaverd 30afd5eff8 Убрал CI/CD конфиг, все равно не работает 2024-05-27 10:04:20 +08:00
p.belezov 126656d14e В расписании заредизайнил список ссылок
Some checks failed
Gitea Actions / Build and deploy (push) Has been cancelled
2024-05-27 09:59:13 +08:00
Dhaverd 6411058c45 Написал Readme по установке
Some checks failed
Gitea Actions / Build and deploy (push) Has been cancelled
2024-04-21 14:55:15 +08:00
Dhaverd 7c46d1f9c2 Написал Readme по установке
Some checks are pending
Gitea Actions / Build and deploy (push) Waiting to run
2024-04-21 14:52:58 +08:00
Dhaverd e6827b7c62 Поправил миграции
Some checks are pending
Gitea Actions / Build and deploy (push) Waiting to run
2024-04-21 14:38:06 +08:00
Dhaverd 7615ca7605 Merge pull request 'rebase-to-store' (#6) from rebase-to-store into master
Some checks are pending
Gitea Actions / Build and deploy (push) Waiting to run
Reviewed-on: http://gitea.dhaverd.ru/Dhaverd/New-site/pulls/6
2024-04-20 11:14:03 +03:00
Dhaverd 35a93c343e Перенес запросы на бэк из basya в стор pinia
Some checks failed
Gitea Actions / Build and deploy (push) Has been cancelled
2024-04-20 16:12:45 +08:00
Dhaverd e04bc5ba98 Запилил стор для расписания стримов 2024-04-20 01:08:18 +08:00
Dhaverd d128e6f90a Запилил стор для расписания стримов 2024-04-20 01:07:52 +08:00
p.belezov 315a0ab0d7 Поправил анимацию кнопки
Some checks failed
Gitea Actions / Build and deploy (push) Has been cancelled
2024-04-18 13:54:29 +08:00
p.belezov 409faab0f9 Поправил название страницы
Some checks are pending
Gitea Actions / Build and deploy (push) Waiting to run
2024-04-18 13:48:56 +08:00
p.belezov 803d7a0af6 Поправил день, убрал вывод в консоль
Some checks are pending
Gitea Actions / Build and deploy (push) Waiting to run
2024-04-18 13:47:20 +08:00
Dhaverd 7c0f2897a2 Merge pull request 'friday-page' (#5) from friday-page into master
Some checks failed
Gitea Actions / Build and deploy (push) Has been cancelled
Reviewed-on: http://gitea.dhaverd.ru/Dhaverd/New-site/pulls/5
2024-04-18 08:42:56 +03:00
32 changed files with 449 additions and 200 deletions

View File

@ -1,47 +0,0 @@
name: Gitea Actions
run-name: ${{ gitea.actor }} is testing out Gitea Actions ??
on: [push]
jobs:
Explore-Gitea-Actions:
runs-on: ubuntu-latest
env:
COMPOSER_AUTH: '{"github-oauth": {"github.com": "${{ secrets.COMPOSER_AUTH }}"}}'
name: Build and deploy
steps:
- name: Migrate env file
run: |
echo "${{ secrets.ENVIRONMENT }}" > ./.env
cat ./.env
- name: Install Node
uses: actions/setup-node@v4
with:
node-version: 18
- name: Checkout code
uses: actions/checkout@v3
- name: Install PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
extensions: curl, exif, fileinfo, mbstring, mysqli, mysqlnd, openssl, PDO, pdo_mysql
- name: Update npm dependencies
run: |
node -v
npm i --progress=false
- name: Update composer dependencies
uses: "ramsey/composer-install@v3"
with:
dependency-versions: "locked"
- name: Build frontend
run: npm run build
- name: Deploy to Server
uses: https://gitea.com/aquelle1/ssh-deploy@main
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_KEY }}
ARGS: "-rlgoDzvc -i --delete"
SOURCE: "./"
REMOTE_HOST: ${{ secrets.SSH_HOST }}
REMOTE_USER: ${{ secrets.SSH_USER }}
TARGET: ${{ secrets.SSH_DIR }}
SCRIPT_BEFORE: systemctl stop resume
SCRIPT_AFTER: systemctl start resume

View File

@ -1,66 +1,44 @@
<p align="center"><a href="https://laravel.com" target="_blank"><img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400" alt="Laravel Logo"></a></p> # Установка
<p align="center"> ## 1. Клонируем проект с гита
<a href="https://github.com/laravel/framework/actions"><img src="https://github.com/laravel/framework/workflows/tests/badge.svg" alt="Build Status"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/dt/laravel/framework" alt="Total Downloads"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/v/laravel/framework" alt="Latest Stable Version"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/l/laravel/framework" alt="License"></a>
</p>
## About Laravel ```
git clone http://gitea.dhaverd.ru:3000/Dhaverd/New-site.git
```
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as: ## 2. Устанавливаем зависимости
```
npm i
composer install
```
- [Simple, fast routing engine](https://laravel.com/docs/routing). ## 3. Мигрируем бд
- [Powerful dependency injection container](https://laravel.com/docs/container). ```
- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage. php artisan migrate
- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent). ```
- Database agnostic [schema migrations](https://laravel.com/docs/migrations).
- [Robust background job processing](https://laravel.com/docs/queues).
- [Real-time event broadcasting](https://laravel.com/docs/broadcasting).
Laravel is accessible, powerful, and provides tools required for large, robust applications. ## 4. Устанавливаем Voyager
```
php artisan voyager:install
php artisan voyager:admin your@email.com --create
php artisan vendor:publish --provider="TCG\Voyager\VoyagerServiceProvider"
php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravelRecent"
php artisan migrate
```
## Learning Laravel ## 5. Пишем .env по примеру
Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. Главное это настроить подключение к БД:
```
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
```
You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch. ## 6. Билдим фронт
```
If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 2000 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library. npm run build
```
## Laravel Sponsors
We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com).
### Premium Partners
- **[Vehikl](https://vehikl.com/)**
- **[Tighten Co.](https://tighten.co)**
- **[WebReinvent](https://webreinvent.com/)**
- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)**
- **[64 Robots](https://64robots.com)**
- **[Curotec](https://www.curotec.com/services/technologies/laravel/)**
- **[Cyber-Duck](https://cyber-duck.co.uk)**
- **[DevSquad](https://devsquad.com/hire-laravel-developers)**
- **[Jump24](https://jump24.co.uk)**
- **[Redberry](https://redberry.international/laravel/)**
- **[Active Logic](https://activelogic.com)**
- **[byte5](https://byte5.de)**
- **[OP.GG](https://op.gg)**
## Contributing
Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions).
## Code of Conduct
In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct).
## Security Vulnerabilities
If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed.
## License
The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).

View File

@ -0,0 +1,19 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\Rating;
class RatingController extends Controller
{
public function index(Request $request)
{
$rating = new Rating;
$rating->rate = $request->rate;
$rating->comment = $request->comment;
$rating->save();
return ['code' => $rating->save() ? 200 : 500];
}
}

19
app/Models/Rating.php Normal file
View File

@ -0,0 +1,19 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
class Rating extends Model
{
use HasFactory;
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'rating';
}

View File

@ -16,6 +16,7 @@ return new class extends Migration
$table->text("link_name"); $table->text("link_name");
$table->text("link"); $table->text("link");
$table->text("image"); $table->text("image");
$table->timestamps();
}); });
} }

View File

@ -15,6 +15,7 @@ return new class extends Migration
$table->id("id"); $table->id("id");
$table->text("weekday_name"); $table->text("weekday_name");
$table->date("current_date"); $table->date("current_date");
$table->timestamps();
}); });
} }

View File

@ -14,6 +14,7 @@ return new class extends Migration
Schema::create('games', function (Blueprint $table) { Schema::create('games', function (Blueprint $table) {
$table->id("id"); $table->id("id");
$table->text("name"); $table->text("name");
$table->timestamps();
}); });
} }

View File

@ -20,6 +20,7 @@ return new class extends Migration
table: "games", column: "id", indexName: "constraint_game_id" table: "games", column: "id", indexName: "constraint_game_id"
); );
$table->text("stream_time"); $table->text("stream_time");
$table->timestamps();
}); });
} }

View File

@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('basya_phrases', function (Blueprint $table) {
$table->id();
$table->string('phrase', 255);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('basya_phrases');
}
};

View File

@ -0,0 +1,29 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('rating', function (Blueprint $table) {
$table->id();
$table->integer('rate')->nullable();
$table->text('comment')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('rating');
}
};

BIN
public/images/gg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 1023 KiB

After

Width:  |  Height:  |  Size: 1023 KiB

BIN
public/images/twitch.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

BIN
public/images/vk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
public/images/vkplay.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

BIN
public/images/youtube.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -1,5 +1,6 @@
import './js/bootstrap'; import './js/bootstrap';
import {createApp} from 'vue' import {createApp} from 'vue'
import { createPinia } from 'pinia'
import App from './views/basya/Basya.vue' import App from './views/basya/Basya.vue'
import { createVuetify } from 'vuetify' import { createVuetify } from 'vuetify'
import { mdi } from "vuetify/iconsets/mdi"; import { mdi } from "vuetify/iconsets/mdi";
@ -8,9 +9,11 @@ import * as components from 'vuetify/components'
import * as directives from 'vuetify/directives' import * as directives from 'vuetify/directives'
import '@mdi/font/css/materialdesignicons.css' import '@mdi/font/css/materialdesignicons.css'
const pinia = createPinia();
const vuetify = createVuetify({ const vuetify = createVuetify({
components, components,
directives directives
}) })
createApp(App).use(vuetify).mount("#app") createApp(App).use(vuetify).use(pinia).mount("#app")

View File

@ -0,0 +1,39 @@
.box-gradient {
border: 10px solid transparent;
background: linear-gradient(
#ffffff,
#ffffff) padding-box,
linear-gradient(45deg,
#FF52E5,
#F6D242) border-box;
border-radius: 14px;
}
.neon-text {
color: #fff!important;
text-shadow:
0 0 3px #fff,
0 0 5px #fff,
0 0 11px #fff,
0 0 16px #bc13fe,
0 0 20px #bc13fe,
0 0 26px #bc13fe,
0 0 30px #bc13fe,
0 0 34px #bc13fe !important;
}
.neon-border {
border: 0.2rem solid #fff !important;
border-radius: 2rem !important;
box-shadow: 0 0 .2rem #fff,
0 0 .2rem #fff,
0 0 2rem #bc13fe,
0 0 0.8rem #bc13fe,
0 0 2.8rem #bc13fe,
inset 0 0 1.3rem #bc13fe !important;
animation: pulsate 1.5s infinite alternate !important;
}
.white-text {
color: white!important;
}

View File

@ -1,15 +0,0 @@
import {defineStore} from "pinia";
export const useScheduleStore = defineStore('Schedule', {
state: () => ({
fetchingDates: true,
fetchingTable: true,
fetchingLinks: true
}),
getters: {
},
actions: {
},
})

20
resources/stores/basya.js Normal file
View File

@ -0,0 +1,20 @@
import {defineStore} from "pinia";
import axios from "axios";
export const useBasyaStore = defineStore('basya', {
state: () => ({
phrases: Object
}),
getters: {
},
actions: {
async getPhrases(){
await axios
.get('/api/v1/phrases')
.then((response) => {
this.phrases = response.data;
});
}
},
})

View File

@ -0,0 +1,37 @@
import {defineStore} from "pinia";
import axios from "axios";
export const useScheduleStore = defineStore('schedule', {
state: () => ({
dates: Object,
links: Object,
schedules: Object
}),
getters: {
},
actions: {
async getDates(){
await axios
.get('/api/v1/dates')
.then((response) => {
this.dates = response.data;
});
},
async getLinks(){
await axios
.get('/api/v1/links')
.then((response)=>{
this.links = response.data;
})
},
async getSchedules(){
await axios
.get('/api/v1/schedules')
.then((response)=>{
this.schedules = response.data;
})
}
},
})

View File

@ -1,42 +1,54 @@
<template> <template>
<v-sheet class="mt-5 mb-5 rounded-lg w-75"> <v-sheet class="bg-grey-darken-3 mt-5 mb-5 rounded-lg w-75 pl-3">
<p class="text-xl-h3 text-lg-h3 text-md-h4 text-sm-h4 text-h5 ma-5">Расписание стримов</p> <p class="neon-text text-xl-h3 text-lg-h3 text-md-h4 text-sm-h4 text-h5 ma-5">Расписание стримов</p>
<v-skeleton-loader v-if="fetching" type="text" /> <v-skeleton-loader v-if="fetching" type="text" class="bg-grey-darken-3"/>
<p v-else class="ma-5 text-xl-h3 text-lg-h3 text-md-h4 text-sm-h4 text-h5"> {{ parseDate(dates[0].current_date) }} - {{ parseDate(dates[1].current_date) }}</p> <p v-else class="neon-text ma-5 text-xl-h3 text-lg-h3 text-md-h4 text-sm-h4 text-h5"> {{ parseDate(dates[0].current_date) }} - {{ parseDate(dates[1].current_date) }}</p>
<ScheduleTable/> <ScheduleTable :is-wide="isWide"/>
<p class="text-xl-h3 text-lg-h3 text-md-h4 text-sm-h4 text-h5 ma-5">Ссылочки</p> <p class="neon-text text-xl-h3 text-lg-h3 text-md-h4 text-sm-h4 text-h5 ma-5">Ссылочки</p>
<Links/> <Links :is-wide="isWide"/>
<AdditionalButtons :is-wide="isWide"/>
</v-sheet> </v-sheet>
</template> </template>
<script> <script>
import axios from "axios";
import ScheduleTable from "./Schedule/ScheduleTable.vue"; import ScheduleTable from "./Schedule/ScheduleTable.vue";
import Links from "./Schedule/Links.vue"; import Links from "./Schedule/Links.vue";
import AdditionalButtons from "./Schedule/AdditionalButtons.vue";
import {ref} from "vue";
import {useScheduleStore} from '../stores/schedule.js';
export default { export default {
name: "Schedule", name: "Schedule",
components: {Links, ScheduleTable}, components: {AdditionalButtons, Links, ScheduleTable},
data: () => ({ data: () => ({
dates: [], dates: ref(),
fetching: true scheduleStore: useScheduleStore(),
fetching: true,
windowHeight: document.documentElement.clientHeight,
windowWidth: document.documentElement.clientWidth,
isWide: window.innerWidth >= 460
}), }),
methods: { methods: {
parseDate(date){ parseDate(date){
let dateArr = date.split("-"); let dateArr = date.split("-");
return dateArr[2] + "." + dateArr[1]; return dateArr[2] + "." + dateArr[1];
}, },
async getDates(){ myEventHandler(e) {
await axios this.windowHeight = document.documentElement.clientHeight;
.get('/api/v1/dates') this.windowWidth = document.documentElement.clientWidth;
.then(response => { this.isWide = this.windowWidth >= 460;
this.dates = response.data;
this.fetching = false;
});
} }
}, },
created() {
window.addEventListener("resize", this.myEventHandler);
},
mounted() { mounted() {
this.getDates(); this.scheduleStore.getDates().then(()=>{
this.dates = this.scheduleStore.dates;
this.fetching = false;
});
this.myEventHandler();
window.addEventListener("resize", this.myEventHandler, { passive: true });
} }
} }
</script> </script>

View File

@ -0,0 +1,101 @@
<script>
import Links from "./Links.vue";
import ScheduleTable from "./ScheduleTable.vue";
import {ref} from "vue";
import {useScheduleStore} from "../../stores/schedule.js";
export default {
name: "AdditionalButtons",
data: () => ({
showModal: ref(false),
afterModal: ref(false),
afterModalText: '',
rating: 0,
comment: ''
}),
props: {
isWide: Boolean
},
methods:{
onShowModal(){
this.showModal = !this.showModal;
if (!this.showModal){
this.rating = 0;
this.comment = '';
}
},
onShowAfterModal(){
this.afterModal = !this.afterModal;
},
sendRating(){
axios.post(
'/api/v1/rating',
{
rate: this.rating,
comment: this.comment
}
).then((responce)=>{
this.onShowModal();
console.log(responce.data['code']);
if (responce.data['code'] === 200){
this.afterModalText = 'Спасибо за отзыв!';
} else {
this.afterModalText = 'Ошибка: Отзыв не отправился :(';
}
this.onShowAfterModal();
});
}
}
}
</script>
<template>
<div class="w-100 d-flex justify-space-evenly" :class="isWide ? '' : 'flex-column'">
<v-btn
class="bg-grey-darken-3 neon-border pt-3 pb-3 pl-3 pr-3 mt-7 mb-7 mr-5 ml-5 h-auto"
text="Кинуть копеечку"
href="https://www.donationalerts.com/r/dhaverd"
target="_blank"
/>
<v-btn
class="bg-grey-darken-3 neon-border pt-3 pb-3 pl-3 pr-3 mt-7 mb-7 mr-5 ml-5 h-auto"
text="Оставить отзыв"
@click="onShowModal"
/>
</div>
<v-dialog v-model="showModal" class="align-center" :class="isWide ? 'w-50' : 'w-100 h-100'">
<v-sheet class="mt-5 mb-5 pa-5 h-auto rounded-lg bg-grey-darken-3 neon-border d-flex flex-column">
<div class="w-100 d-flex justify-end bg-grey-darken-3">
<v-btn class="bg-grey-darken-3" icon="mdi-window-close" elevation="0" @click="onShowModal"/>
</div>
<v-label class="text-xl-h6 white-text ">Оцените канал:</v-label>
<v-rating v-model="rating" active-color="purple-darken-1">
sss
</v-rating>
<v-label class="text-xl-h6 mb-2 white-text ">Оставьте отзыв:</v-label>
<v-textarea v-model="comment" clearable variant="outlined" label="Что можно улучшить?"/>
<div class="d-flex justify-center">
<v-btn class="bg-grey-darken-3 neon-border pt-3 pb-3 pl-3 pr-3 w-auto h-auto" @click="sendRating">Отправить</v-btn>
</div>
</v-sheet>
</v-dialog>
<v-dialog v-model="afterModal" class="align-center" :class="isWide ? 'w-50' : 'w-100 h-100'">
<v-sheet class="mt-5 mb-5 pa-5 h-auto rounded-lg bg-grey-darken-3 neon-border d-flex flex-column">
<div class="w-100 d-flex justify-end bg-grey-darken-3">
<v-btn class="bg-grey-darken-3" icon="mdi-window-close" elevation="0" @click="onShowAfterModal"/>
</div>
<v-label class="text-xl-h6 white-text justify-center">{{afterModalText}}</v-label>
</v-sheet>
</v-dialog>
</template>
<style scoped>
.v-dialog {
align-items: center;
justify-content: center;
margin: auto;
}
.v-label {
color: #000000;
}
</style>

View File

@ -1,45 +1,33 @@
<script> <script>
import axios from "axios"; import {ref} from "vue";
import {useScheduleStore} from '../../stores/schedule.js';
export default { export default {
name: "Links", name: "Links",
data: () => ({ data: () => ({
links: [], links: ref(),
fetching: true, fetching: true,
windowHeight: document.documentElement.clientHeight, scheduleStore: useScheduleStore()
windowWidth: document.documentElement.clientWidth,
isWide: window.innerWidth >= 460
}), }),
props: {
isWide: Boolean
},
mounted() { mounted() {
axios this.scheduleStore.getLinks().then(()=>{
.get('/api/v1/links') this.links = this.scheduleStore.links;
.then(response => { this.fetching = false;
this.links = response.data; });
this.fetching = false;
});
this.myEventHandler();
window.addEventListener("resize", this.myEventHandler, { passive: true });
},
created() {
window.addEventListener("resize", this.myEventHandler);
},
methods: {
myEventHandler(e) {
this.windowHeight = document.documentElement.clientHeight;
this.windowWidth = document.documentElement.clientWidth;
this.isWide = this.windowWidth >= 460;
}
} }
} }
</script> </script>
<template> <template>
<div class="w-100 d-flex justify-center"> <div class="w-100 d-flex justify-center">
<v-list :class="isWide ? 'w-66' : 'w-100'"> <v-list class="bg-grey-darken-3" :class="isWide ? 'w-66' : 'w-100'">
<v-skeleton-loader v-if="fetching" type="list-item"/> <v-skeleton-loader v-if="fetching" type="list-item" class="bg-grey-darken-3 ml-1 mr-3"/>
<v-list-item v-else class="ma-5 bg-gradient-noh" elevation="6" v-for="link in links" :href="link.link"> <!-- style="background-color: #E57373; color: #FFFFFF" --> <v-list-item v-else class="bg-grey-darken-3 neon-border mt-6 mb-7 ml-7 mr-7" elevation="0" v-for="link in links" :href="link.link"> <!-- style="background-color: #E57373; color: #FFFFFF" -->
<template v-slot:prepend> <template v-slot:prepend>
<v-avatar :image="link.image" rounded="0"></v-avatar> <v-avatar class="mt-1 mb-1 ml-5" :image="link.image" rounded="0"></v-avatar>
</template> </template>
<v-list-item-title>{{ link.link_name }}</v-list-item-title> <v-list-item-title>{{ link.link_name }}</v-list-item-title>
</v-list-item> </v-list-item>
@ -48,9 +36,5 @@
</template> </template>
<style scoped> <style scoped>
.bg-gradient-noh {
background: linear-gradient(-45deg, #f103b0, #f0a068, #4fdbfeff);
background-size: 200% 200%;
animation: gradient 15s ease infinite;
}
</style> </style>

View File

@ -1,12 +1,17 @@
<script> <script>
import axios from "axios"; import {useScheduleStore} from '../../stores/schedule.js';
import {ref} from "vue";
export default { export default {
name: "ScheduleTable", name: "ScheduleTable",
data: () => ({ data: () => ({
schedules: [], schedules: ref(),
scheduleStore: useScheduleStore(),
fetching: true fetching: true
}), }),
props: {
isWide: Boolean
},
methods: { methods: {
parseDate(date){ parseDate(date){
let dateArr = date.split("-"); let dateArr = date.split("-");
@ -14,20 +19,18 @@
} }
}, },
mounted() { mounted() {
axios this.scheduleStore.getSchedules().then(()=>{
.get('/api/v1/schedules') this.schedules = this.scheduleStore.schedules;
.then(response => { this.fetching = false;
this.schedules = response.data; });
this.fetching = false;
});
} }
} }
</script> </script>
<template> <template>
<div class="w-100 d-flex justify-center"> <div class="w-100 d-flex justify-center mt-6 mb-6">
<v-skeleton-loader v-if="fetching" type="table"/> <v-skeleton-loader v-if="fetching" type="table" class="bg-grey-darken-3 mr-3 ml-1"/>
<v-table v-else class="text-xl-h5 text-lg-h5 text-md-h5 text-sm-h5 text-body-2 w-66"> <v-table v-else class="bg-grey-darken-3 neon-border pa-3 ml-1 mr-3 text-xl-h5 text-lg-h5 text-md-h5 text-sm-h5 text-body-2" :class="isWide ? 'w-66' : 'w-100'">
<tbody> <tbody>
<tr v-for="schedule in schedules"> <tr v-for="schedule in schedules">
<td>{{ parseDate(schedule.current_date) }} {{ schedule.weekday_name }} {{ schedule.stream_time }}</td> <td>{{ parseDate(schedule.current_date) }} {{ schedule.weekday_name }} {{ schedule.stream_time }}</td>

View File

@ -34,7 +34,8 @@
<script> <script>
import {ref} from 'vue'; import {ref} from 'vue';
import axios from "axios"; import {useBasyaStore} from "../../stores/basya.js";
export default { export default {
name: "Basya", name: "Basya",
data: () => ({ data: () => ({
@ -44,7 +45,8 @@ export default {
currentPhrase: ref(), currentPhrase: ref(),
winWidth: ref(document.documentElement.clientWidth), winWidth: ref(document.documentElement.clientWidth),
// size: ref(), // size: ref(),
isLess: false isLess: false,
basyaStore: useBasyaStore()
}), }),
methods: { methods: {
reloadPhrase(){ reloadPhrase(){
@ -61,13 +63,11 @@ export default {
} }
}, },
mounted() { mounted() {
axios this.basyaStore.getPhrases().then(()=>{
.get('/api/v1/phrases') this.phrases = this.basyaStore.phrases;
.then(response => { this.reloadPhrase();
this.phrases = response.data; this.fetching = false;
this.reloadPhrase(); })
this.fetching = false;
});
this.isLess = ref(this.winWidth.value <= 600 ? 'flex-column' : ''); this.isLess = ref(this.winWidth.value <= 600 ? 'flex-column' : '');
/* /*
this.size = this.winWidth <= 600 ? 'x-small' : this.size = this.winWidth <= 600 ? 'x-small' :

View File

@ -55,13 +55,12 @@ export default {
methods: { methods: {
getCurrentDay(){ getCurrentDay(){
let date = new Date(); let date = new Date();
console.log(date);
return date.getDay(); return date.getDay();
}, },
checkFriday(){ checkFriday(){
this.isFirst = false; this.isFirst = false;
let day = this.getCurrentDay(); let day = this.getCurrentDay();
this.notFriday = day !== 4; this.notFriday = day !== 5;
this.day = this.dayList[day]; this.day = this.dayList[day];
if (this.notFriday){ if (this.notFriday){
let prevPhrase = this.phrase; let prevPhrase = this.phrase;
@ -135,12 +134,15 @@ export default {
0% { 0% {
background-color: red; background-color: red;
} }
50% { 25% {
background-color: #00ff00; background-color: #00ff00;
} }
100% { 75% {
background-color: blue; background-color: blue;
} }
100% {
background-color: red;
}
} }
</style> </style>

View File

@ -3,7 +3,7 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>Информация о трансляциях</title> <title>Сегодня пятница?</title>
@vite('resources/friday.js') @vite('resources/friday.js')
@vite('resources/css/app.css') @vite('resources/css/app.css')
</head> </head>

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="d-flex justify-end align-center"> <div class="d-flex justify-end align-center">
<v-table class="main-sheet-bg text-xl-h6 text-lg-body-1 text-md-body-1 text-sm-body-1 text-caption pl-5" :class="[this.isMore700 ? this.isWide ? 'w-25' : 'w-66' : 'w-100']" style="text-align: left"> <v-table class="main-sheet-bg text-xxl-h6 text-xl-body-1 text-lg-body-1 text-md-body-1 text-sm-body-1 text-caption pl-5" :class="[this.isMore700 ? this.isWide ? 'w-25' : 'w-66' : 'w-100']" style="text-align: left">
<tbody> <tbody>
<tr> <tr>
<td><v-icon :icon="`mdi-account`"></v-icon>Возраст</td> <td><v-icon :icon="`mdi-account`"></v-icon>Возраст</td>
@ -21,7 +21,7 @@
</tbody> </tbody>
</v-table> </v-table>
<div v-if="this.isMore700" class="w-33"> <div v-if="this.isMore700" class="w-33">
<v-img class="image-gradient" src="./resume.png"></v-img> <v-img class="image-gradient" src="./images/resume.png"></v-img>
</div> </div>
</div> </div>
</template> </template>
@ -38,7 +38,7 @@ export default {
}, },
windowHeight: document.documentElement.clientHeight, windowHeight: document.documentElement.clientHeight,
windowWidth: document.documentElement.clientWidth, windowWidth: document.documentElement.clientWidth,
isWide: window.innerWidth > 1750, isWide: window.innerWidth > 1920,
isMore700: window.innerWidth > 700, isMore700: window.innerWidth > 700,
tableClass: 'w-25' tableClass: 'w-25'
}), }),

View File

@ -6,6 +6,22 @@
<title>Резюме</title> <title>Резюме</title>
@vite('resources/app.js') @vite('resources/app.js')
@vite('resources/css/app.css') @vite('resources/css/app.css')
<!-- Yandex.Metrika counter -->
<script type="text/javascript" >
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
ym(97497664, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true
});
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/97497664" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
</head> </head>
<body class="antialiased"> <body class="antialiased">
<div id="app"></div> <div id="app"></div>

View File

@ -6,6 +6,22 @@
<title>Информация о трансляциях</title> <title>Информация о трансляциях</title>
@vite('resources/welcome.js') @vite('resources/welcome.js')
@vite('resources/css/app.css') @vite('resources/css/app.css')
<!-- Yandex.Metrika counter -->
<script type="text/javascript" >
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
ym(97497583, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true
});
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/97497583" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
</head> </head>
<body class="antialiased"> <body class="antialiased">
<div id="app"></div> <div id="app"></div>

View File

@ -19,3 +19,4 @@ Route::get('/links', 'App\Http\Controllers\LinksController@index')->name('links'
Route::get('/schedules', 'App\Http\Controllers\SchedulesController@index')->name('schedules'); Route::get('/schedules', 'App\Http\Controllers\SchedulesController@index')->name('schedules');
Route::get('/dates', 'App\Http\Controllers\SchedulesController@mmDate')->name('dates'); Route::get('/dates', 'App\Http\Controllers\SchedulesController@mmDate')->name('dates');
Route::get('/phrases', 'App\Http\Controllers\BasyaPhrasesController@index')->name('phrases'); Route::get('/phrases', 'App\Http\Controllers\BasyaPhrasesController@index')->name('phrases');
Route::post('/rating', 'App\Http\Controllers\RatingController@index')->name('rating');