Compare commits
1 Commits
master
...
feature-tw
Author | SHA1 | Date | |
---|---|---|---|
|
fdbb8e9f79 |
|
@ -0,0 +1,47 @@
|
||||||
|
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
|
94
README.md
|
@ -1,44 +1,66 @@
|
||||||
# Установка
|
<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>
|
||||||
|
|
||||||
## 1. Клонируем проект с гита
|
<p align="center">
|
||||||
|
<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
|
|
||||||
```
|
|
||||||
|
|
||||||
## 2. Устанавливаем зависимости
|
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:
|
||||||
```
|
|
||||||
npm i
|
|
||||||
composer install
|
|
||||||
```
|
|
||||||
|
|
||||||
## 3. Мигрируем бд
|
- [Simple, fast routing engine](https://laravel.com/docs/routing).
|
||||||
```
|
- [Powerful dependency injection container](https://laravel.com/docs/container).
|
||||||
php artisan migrate
|
- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage.
|
||||||
```
|
- 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).
|
||||||
|
|
||||||
## 4. Устанавливаем Voyager
|
Laravel is accessible, powerful, and provides tools required for large, robust applications.
|
||||||
```
|
|
||||||
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
|
|
||||||
```
|
|
||||||
|
|
||||||
## 5. Пишем .env по примеру
|
## Learning Laravel
|
||||||
|
|
||||||
Главное это настроить подключение к БД:
|
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=
|
|
||||||
```
|
|
||||||
|
|
||||||
## 6. Билдим фронт
|
You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch.
|
||||||
```
|
|
||||||
npm run build
|
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.
|
||||||
```
|
|
||||||
|
## 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).
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers;
|
|
||||||
use Illuminate\Support\Facades\DB;
|
|
||||||
use App\Models\BasyaPhrase;
|
|
||||||
|
|
||||||
class BasyaPhrasesController extends Controller
|
|
||||||
{
|
|
||||||
public function index(){
|
|
||||||
return DB::table('basya_phrases')->get();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
<?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];
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Models;
|
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
|
||||||
|
|
||||||
class BasyaPhrase extends Model
|
|
||||||
{
|
|
||||||
use HasFactory;
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
<?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';
|
|
||||||
}
|
|
|
@ -16,7 +16,6 @@ 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();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,6 @@ 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();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,6 @@ 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();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,6 @@ 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();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
<?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');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,29 +0,0 @@
|
||||||
<?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');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "new.site",
|
"name": "New-site",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
|
|
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 92 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 1023 KiB After Width: | Height: | Size: 1023 KiB |
|
@ -1,19 +0,0 @@
|
||||||
import './js/bootstrap';
|
|
||||||
import {createApp} from 'vue'
|
|
||||||
import { createPinia } from 'pinia'
|
|
||||||
import App from './views/basya/Basya.vue'
|
|
||||||
import { createVuetify } from 'vuetify'
|
|
||||||
import { mdi } from "vuetify/iconsets/mdi";
|
|
||||||
import 'vuetify/styles'
|
|
||||||
import * as components from 'vuetify/components'
|
|
||||||
import * as directives from 'vuetify/directives'
|
|
||||||
import '@mdi/font/css/materialdesignicons.css'
|
|
||||||
|
|
||||||
const pinia = createPinia();
|
|
||||||
|
|
||||||
const vuetify = createVuetify({
|
|
||||||
components,
|
|
||||||
directives
|
|
||||||
})
|
|
||||||
|
|
||||||
createApp(App).use(vuetify).use(pinia).mount("#app")
|
|
|
@ -1,39 +0,0 @@
|
||||||
.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;
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
import './js/bootstrap';
|
|
||||||
import { createApp } from 'vue'
|
|
||||||
import { createPinia } from 'pinia'
|
|
||||||
import App from './views/friday/Friday.vue'
|
|
||||||
import { createVuetify } from 'vuetify'
|
|
||||||
import 'vuetify/styles'
|
|
||||||
import * as components from 'vuetify/components'
|
|
||||||
import * as directives from 'vuetify/directives'
|
|
||||||
import '@mdi/font/css/materialdesignicons.css'
|
|
||||||
|
|
||||||
const pinia = createPinia();
|
|
||||||
|
|
||||||
const vuetify = createVuetify({
|
|
||||||
components,
|
|
||||||
directives
|
|
||||||
});
|
|
||||||
|
|
||||||
createApp(App).use(vuetify).use(pinia).mount("#app");
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
import {defineStore} from "pinia";
|
||||||
|
|
||||||
|
export const useScheduleStore = defineStore('Schedule', {
|
||||||
|
state: () => ({
|
||||||
|
fetchingDates: true,
|
||||||
|
fetchingTable: true,
|
||||||
|
fetchingLinks: true
|
||||||
|
}),
|
||||||
|
getters: {
|
||||||
|
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
|
||||||
|
},
|
||||||
|
})
|
|
@ -1,20 +0,0 @@
|
||||||
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;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
|
|
@ -1,37 +0,0 @@
|
||||||
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;
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
},
|
|
||||||
})
|
|
|
@ -1,54 +1,64 @@
|
||||||
<template>
|
<template>
|
||||||
<v-sheet class="bg-grey-darken-3 mt-5 mb-5 rounded-lg w-75 pl-3">
|
<v-sheet class="mt-5 mb-5 rounded-lg w-75">
|
||||||
<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-h4"> {{ 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"/>
|
<Links/>
|
||||||
<p class="neon-text text-xl-h3 text-lg-h3 text-md-h4 text-sm-h4 text-h5 ma-5">Ссылочки</p>
|
<iframe
|
||||||
<Links :is-wide="isWide"/>
|
src="https://player.twitch.tv/?channel=dhaverd&parent=localhost:8000/&muted=true"
|
||||||
<AdditionalButtons :is-wide="isWide"/>
|
frameborder="0"
|
||||||
|
allowfullscreen="true"
|
||||||
|
scrolling="no"
|
||||||
|
height="378"
|
||||||
|
width="620"
|
||||||
|
/>
|
||||||
</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: {AdditionalButtons, Links, ScheduleTable},
|
components: {Links, ScheduleTable},
|
||||||
data: () => ({
|
data: () => ({
|
||||||
dates: ref(),
|
dates: [],
|
||||||
scheduleStore: useScheduleStore(),
|
|
||||||
fetching: true,
|
fetching: true,
|
||||||
windowHeight: document.documentElement.clientHeight,
|
twitchStreamIsOnline: false
|
||||||
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];
|
||||||
},
|
},
|
||||||
myEventHandler(e) {
|
async getDates(){
|
||||||
this.windowHeight = document.documentElement.clientHeight;
|
await axios
|
||||||
this.windowWidth = document.documentElement.clientWidth;
|
.get('/api/v1/dates')
|
||||||
this.isWide = this.windowWidth >= 460;
|
.then(response => {
|
||||||
|
this.dates = response.data;
|
||||||
|
this.fetching = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async checkTwitchStreamOnline(){
|
||||||
|
await axios
|
||||||
|
.get('https://api.twitch.tv/helix/search/channels?query=Dhaverd', {
|
||||||
|
headers: {
|
||||||
|
'Authorization': 'Bearer 2gbdx6oar67tqtcmt49t3wpcgycthx',
|
||||||
|
'Client-Id': 'wbmytr93xzw8zbg0p1izqyzzc5mbiz'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(response => {
|
||||||
|
for (let item in response.data){
|
||||||
|
console.log(item);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
|
||||||
window.addEventListener("resize", this.myEventHandler);
|
|
||||||
},
|
|
||||||
mounted() {
|
mounted() {
|
||||||
this.scheduleStore.getDates().then(()=>{
|
this.getDates();
|
||||||
this.dates = this.scheduleStore.dates;
|
this.checkTwitchStreamOnline();
|
||||||
this.fetching = false;
|
|
||||||
});
|
|
||||||
this.myEventHandler();
|
|
||||||
window.addEventListener("resize", this.myEventHandler, { passive: true });
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,101 +0,0 @@
|
||||||
<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>
|
|
|
@ -1,33 +1,31 @@
|
||||||
<script>
|
<script>
|
||||||
import {ref} from "vue";
|
import axios from "axios";
|
||||||
import {useScheduleStore} from '../../stores/schedule.js';
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Links",
|
name: "Links",
|
||||||
data: () => ({
|
data: () => ({
|
||||||
links: ref(),
|
links: [],
|
||||||
fetching: true,
|
fetching: true
|
||||||
scheduleStore: useScheduleStore()
|
|
||||||
}),
|
}),
|
||||||
props: {
|
|
||||||
isWide: Boolean
|
|
||||||
},
|
|
||||||
mounted() {
|
mounted() {
|
||||||
this.scheduleStore.getLinks().then(()=>{
|
axios
|
||||||
this.links = this.scheduleStore.links;
|
.get('/api/v1/links')
|
||||||
this.fetching = false;
|
.then(response => {
|
||||||
});
|
this.links = 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">
|
||||||
<v-list class="bg-grey-darken-3" :class="isWide ? 'w-66' : 'w-100'">
|
<p class="text-h3 ma-5">Ссылочки</p>
|
||||||
<v-skeleton-loader v-if="fetching" type="list-item" class="bg-grey-darken-3 ml-1 mr-3"/>
|
<v-list class="w-66">
|
||||||
<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" -->
|
<v-skeleton-loader v-if="fetching" type="list-item"/>
|
||||||
|
<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" -->
|
||||||
<template v-slot:prepend>
|
<template v-slot:prepend>
|
||||||
<v-avatar class="mt-1 mb-1 ml-5" :image="link.image" rounded="0"></v-avatar>
|
<v-avatar :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>
|
||||||
|
@ -36,5 +34,9 @@
|
||||||
</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>
|
||||||
|
|
|
@ -1,17 +1,12 @@
|
||||||
<script>
|
<script>
|
||||||
import {useScheduleStore} from '../../stores/schedule.js';
|
import axios from "axios";
|
||||||
import {ref} from "vue";
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "ScheduleTable",
|
name: "ScheduleTable",
|
||||||
data: () => ({
|
data: () => ({
|
||||||
schedules: ref(),
|
schedules: [],
|
||||||
scheduleStore: useScheduleStore(),
|
|
||||||
fetching: true
|
fetching: true
|
||||||
}),
|
}),
|
||||||
props: {
|
|
||||||
isWide: Boolean
|
|
||||||
},
|
|
||||||
methods: {
|
methods: {
|
||||||
parseDate(date){
|
parseDate(date){
|
||||||
let dateArr = date.split("-");
|
let dateArr = date.split("-");
|
||||||
|
@ -19,18 +14,21 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.scheduleStore.getSchedules().then(()=>{
|
axios
|
||||||
this.schedules = this.scheduleStore.schedules;
|
.get('/api/v1/schedules')
|
||||||
this.fetching = false;
|
.then(response => {
|
||||||
});
|
this.schedules = response.data;
|
||||||
|
this.fetching = false;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="w-100 d-flex justify-center mt-6 mb-6">
|
<div class="w-100 d-flex justify-center">
|
||||||
<v-skeleton-loader v-if="fetching" type="table" class="bg-grey-darken-3 mr-3 ml-1"/>
|
<p class="text-h3 ma-5">Расписание стримов</p>
|
||||||
<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'">
|
<v-skeleton-loader v-if="fetching" type="table"/>
|
||||||
|
<v-table v-else class="text-h5 w-66">
|
||||||
<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>
|
||||||
|
|
|
@ -24,17 +24,4 @@ export default {
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes gradient {
|
|
||||||
0% {
|
|
||||||
background-position: 0 50%;
|
|
||||||
}
|
|
||||||
50% {
|
|
||||||
background-position: 100% 50%;
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
background-position: 0 50%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -1,103 +0,0 @@
|
||||||
<template>
|
|
||||||
<v-app>
|
|
||||||
<v-sheet class="bg-gradient h-100 w-100 d-flex justify-center">
|
|
||||||
<v-card :elevation="4" class="mt-5 mb-5 align-center justify-center h-auto rounded-lg main-sheet-bg w-75">
|
|
||||||
<v-card-title></v-card-title>
|
|
||||||
<v-card-text class="h-100 d-flex flex-column align-center justify-center">
|
|
||||||
<v-skeleton-loader type="text" v-if="fetching"></v-skeleton-loader>
|
|
||||||
<div v-if="!fetching">
|
|
||||||
<div class="d-flex flex-column align-center justify-center main-text">
|
|
||||||
<p class="text-h4 text-xl-h1 text-md-h2 text-sm-h3 ma-10">Юрий говорит:</p>
|
|
||||||
<p class="text-h5 text-xl-h2 text-md-h3 text-sm-h4 ma-10 vertical-center align-stretch">{{ currentPhrase }}</p>
|
|
||||||
</div>
|
|
||||||
<div class="d-flex align-center justify-center flex-column">
|
|
||||||
<v-btn
|
|
||||||
variant="elevated"
|
|
||||||
color="#94BBE9FF"
|
|
||||||
@click="reloadPhrase"
|
|
||||||
class="ml-10 mr-10 mt-3 mb-3">
|
|
||||||
Другая фраза
|
|
||||||
</v-btn>
|
|
||||||
<a
|
|
||||||
v-if="currentPhrase === secret"
|
|
||||||
href="/download/basya_answer.docx"
|
|
||||||
class="ml-10 mr-10 mt-3 mb-3">
|
|
||||||
<v-btn variant="elevated">Инструкция</v-btn>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</v-card-text>
|
|
||||||
</v-card>
|
|
||||||
</v-sheet>
|
|
||||||
</v-app>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import {ref} from 'vue';
|
|
||||||
import {useBasyaStore} from "../../stores/basya.js";
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: "Basya",
|
|
||||||
data: () => ({
|
|
||||||
secret: 'Для более быстрого результата, можете попробовать самостоятельно исправить ошибку по приложенной инструкции',
|
|
||||||
phrases: ref(),
|
|
||||||
fetching: true,
|
|
||||||
currentPhrase: ref(),
|
|
||||||
winWidth: ref(document.documentElement.clientWidth),
|
|
||||||
// size: ref(),
|
|
||||||
isLess: false,
|
|
||||||
basyaStore: useBasyaStore()
|
|
||||||
}),
|
|
||||||
methods: {
|
|
||||||
reloadPhrase(){
|
|
||||||
let newPhrase = this.phrases[Math.floor(Math.random() * this.phrases.length)].phrase;
|
|
||||||
if (newPhrase === this.currentPhrase){
|
|
||||||
this.reloadPhrase();
|
|
||||||
} else {
|
|
||||||
this.currentPhrase = newPhrase;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onResize(e) {
|
|
||||||
this.winWidth = ref(document.documentElement.clientWidth);
|
|
||||||
console.log(this.winWidth.value);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
this.basyaStore.getPhrases().then(()=>{
|
|
||||||
this.phrases = this.basyaStore.phrases;
|
|
||||||
this.reloadPhrase();
|
|
||||||
this.fetching = false;
|
|
||||||
})
|
|
||||||
this.isLess = ref(this.winWidth.value <= 600 ? 'flex-column' : '');
|
|
||||||
/*
|
|
||||||
this.size = this.winWidth <= 600 ? 'x-small' :
|
|
||||||
this.winWidth > 600 && this.winWidth <= 960 ? 'small' :
|
|
||||||
this.winWidth > 960 && this.winWidth <= 1280 ? '' :
|
|
||||||
this.winWidth > 1280 && this.winWidth <= 1920 ? 'large' :
|
|
||||||
this.winWidth > 1920 ? 'x-large' : '';
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
|
|
||||||
.bg-gradient {
|
|
||||||
background: rgb(238, 174, 202)!important;
|
|
||||||
background: radial-gradient(circle, rgba(238, 174, 202, 1) 0%, rgba(148, 187, 233, 1) 100%)!important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.main-sheet-bg {
|
|
||||||
background-color: #424242;
|
|
||||||
color: #E0E0E0;
|
|
||||||
text-decoration-color: #E0E0E0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.main-text {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.vertical-center {
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
</style>
|
|
|
@ -1,13 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<title>Basya says</title>
|
|
||||||
@vite('resources/basya.js')
|
|
||||||
@vite('resources/css/app.css')
|
|
||||||
</head>
|
|
||||||
<body class="antialiased">
|
|
||||||
<div id="app"></div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,148 +0,0 @@
|
||||||
<template>
|
|
||||||
<v-app>
|
|
||||||
<v-sheet :class="notFriday ? 'bg-gradient' : 'bg-gradient-friday'" class="h-100 w-100 d-flex justify-center">
|
|
||||||
<v-card class="w-75 mt-5 mb-5 align-center justify-center h-auto rounded-lg main-sheet-bg">
|
|
||||||
<v-card-text class="h-100 d-flex flex-column align-center justify-center">
|
|
||||||
<div v-if="!isFirst" class="text-xxl-h2 text-xl-h2 text-lg-h2 text-md-h2 text-h5 mb-10 mt-10 text-center">{{phrase}}</div>
|
|
||||||
<div v-if="notFriday && !isFirst" class="text-xxl-h2 text-xl-h2 text-lg-h2 text-md-h2 text-h5 mb-10 mt-10 text-center">Сегодня {{day}}</div>
|
|
||||||
<v-btn :class="notFriday ? '' : 'btn-friday'" elevation="4" color="#69b7eb" variant="elevated" @click="checkFriday">{{notFriday ? 'Сегодня пятница?' : 'Пятница!'}}</v-btn>
|
|
||||||
</v-card-text>
|
|
||||||
</v-card>
|
|
||||||
</v-sheet>
|
|
||||||
</v-app>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: "Friday",
|
|
||||||
data: () => ({
|
|
||||||
noList: [
|
|
||||||
'Нет',
|
|
||||||
'Еще нет',
|
|
||||||
'До пятницы как до дембеля',
|
|
||||||
'Еще не скоро',
|
|
||||||
'К сожалению, сегодня не пятница',
|
|
||||||
'Еще работать и работать',
|
|
||||||
'Мечтаем о пятнице',
|
|
||||||
'Увы, сегодня не пятница'
|
|
||||||
],
|
|
||||||
yesList: [
|
|
||||||
'Да, сегодня пятница!',
|
|
||||||
'ЕЕЕЕЕЕЕЕЕЕЕЕ',
|
|
||||||
'Чизкейк уже съеден?',
|
|
||||||
'Что заказываем?',
|
|
||||||
'Надо взять чизкейк',
|
|
||||||
'По пивку?',
|
|
||||||
'Абсолютно верно, сегодня - пятница!',
|
|
||||||
'Да, пятница! Отличный повод отпраздновать!',
|
|
||||||
'Да, пятница! Не бывает лучшего дня недели'
|
|
||||||
],
|
|
||||||
isFirst: true,
|
|
||||||
notFriday: true,
|
|
||||||
dayList: {
|
|
||||||
1: 'Понедельник',
|
|
||||||
2: 'Вторник',
|
|
||||||
3: 'Среда',
|
|
||||||
4: 'Четверг',
|
|
||||||
5: 'Пятница',
|
|
||||||
6: 'Суббота',
|
|
||||||
7: 'Воскресенье'
|
|
||||||
},
|
|
||||||
phrase: '',
|
|
||||||
day: ''
|
|
||||||
}),
|
|
||||||
methods: {
|
|
||||||
getCurrentDay(){
|
|
||||||
let date = new Date();
|
|
||||||
return date.getDay();
|
|
||||||
},
|
|
||||||
checkFriday(){
|
|
||||||
this.isFirst = false;
|
|
||||||
let day = this.getCurrentDay();
|
|
||||||
this.notFriday = day !== 5;
|
|
||||||
this.day = this.dayList[day];
|
|
||||||
if (this.notFriday){
|
|
||||||
let prevPhrase = this.phrase;
|
|
||||||
while (this.phrase === prevPhrase){
|
|
||||||
const random = Math.floor(Math.random() * this.noList.length);
|
|
||||||
this.phrase = this.noList[random];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
let prevPhrase = this.phrase;
|
|
||||||
while (this.phrase === prevPhrase){
|
|
||||||
const random = Math.floor(Math.random() * this.yesList.length);
|
|
||||||
this.phrase = this.yesList[random];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
|
|
||||||
.bg-gradient {
|
|
||||||
background: linear-gradient(90deg, #69b7eb, #b3dbd3, #f4d6db);
|
|
||||||
background-size: 200% 200%;
|
|
||||||
animation: gradient 15s ease infinite;
|
|
||||||
height: 100vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
.bg-gradient-friday {
|
|
||||||
background: linear-gradient(-45deg, #ed193b, #a98055, #f286e2, #681d7a);
|
|
||||||
background-size: 200% 200%;
|
|
||||||
animation: gradient-friday 10s ease infinite;
|
|
||||||
height: 100vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
.main-sheet-bg {
|
|
||||||
background-color: #424242;
|
|
||||||
color: #E0E0E0;
|
|
||||||
text-decoration-color: #E0E0E0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-friday {
|
|
||||||
animation: gradient-btn-friday 5s ease infinite;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes gradient {
|
|
||||||
0% {
|
|
||||||
background-position: 0% 50%;
|
|
||||||
}
|
|
||||||
50% {
|
|
||||||
background-position: 100% 50%;
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
background-position: 0% 50%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes gradient-friday {
|
|
||||||
0% {
|
|
||||||
background-position: 0% 50%;
|
|
||||||
}
|
|
||||||
50% {
|
|
||||||
background-position: 100% 50%;
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
background-position: 0% 50%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes gradient-btn-friday {
|
|
||||||
0% {
|
|
||||||
background-color: red;
|
|
||||||
}
|
|
||||||
25% {
|
|
||||||
background-color: #00ff00;
|
|
||||||
}
|
|
||||||
75% {
|
|
||||||
background-color: blue;
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
background-color: red;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
|
@ -1,13 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<title>Сегодня пятница?</title>
|
|
||||||
@vite('resources/friday.js')
|
|
||||||
@vite('resources/css/app.css')
|
|
||||||
</head>
|
|
||||||
<body class="antialiased">
|
|
||||||
<div id="app"></div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,18 +1,18 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-xl-h3 text-lg-h4 text-md-h4 text-sm-h5 text-h6 pb-3">Образование</p>
|
<p class="text-h5 pb-3">Образование</p>
|
||||||
<v-table class="pb-5 main-sheet-bg text-xl-h5 text-lg-h6 text-md-body-1 text-sm-body-1 text-body-2">
|
<v-table class="pb-5 main-sheet-bg">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="pb-2">2020</td>
|
<td>2020</td>
|
||||||
<td class="pb-2">
|
<td>
|
||||||
<p>Братский государственный университет, Братск</p>
|
<p>Братский государственный университет, Братск</p>
|
||||||
<p>Факультет экономики и управления, Прикладная информатика в экономике (бакалавриат)</p>
|
<p>Факультет экономики и управления, Прикладная информатика в экономике (бакалавриат)</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="pt-2 pb-2">2024</td>
|
<td>2024</td>
|
||||||
<td class="pt-2 pb-2">
|
<td>
|
||||||
<p>Братский государственный университет, Братск</p>
|
<p>Братский государственный университет, Братск</p>
|
||||||
<p>Факультет энергетики и автоматики, Веб технологии и информационный анализ данных (магистратура)</p>
|
<p>Факультет энергетики и автоматики, Веб технологии и информационный анализ данных (магистратура)</p>
|
||||||
</td>
|
</td>
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-xl-h3 text-lg-h4 text-md-h4 text-sm-h5 text-h6 pb-3">Опыт работы</p>
|
<p class="text-h5 pb-3">Опыт работы</p>
|
||||||
<v-table class="pb-5 main-sheet-bg text-xl-h5 text-lg-h6 text-md-body-1 text-sm-body-1 text-body-2">
|
<v-table class="pb-5 main-sheet-bg">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="pb-2">Февраль 2022 — август 2023</td>
|
<td>Февраль 2022 — август 2023</td>
|
||||||
<td class="pb-2"><p>Муниципальное казенное учреждение «Центр информационно-технического и транспортного обслуживания» муниципального образования города Братска</p></td>
|
<td><p>Муниципальное казенное учреждение «Центр информационно-технического и транспортного обслуживания» муниципального образования города Братска</p></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="pt-2 pb-2">Сентябрь 2023 — по настоящее время</td>
|
<td>Сентябрь 2023 — по настоящее время</td>
|
||||||
<td class="pt-2 pb-2">Государственное Автономное Учреждение «Иркутский областной многофункциональный центр предоставления государственных и муниципальных услуг»</td>
|
<td>Государственное Автономное Учреждение «Иркутский областной многофункциональный центр предоставления государственных и муниципальных услуг»</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</v-table>
|
</v-table>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<p class="text-xl-h3 text-md-h4 text-sm-h5 text-h6 pb-3">Профессиональные навыки</p>
|
<p class="text-h5 pb-3">Профессиональные навыки</p>
|
||||||
<p style="text-indent: 1em; text-align: justify" class="pb-5 text-body-2 text-xl-h5 text-lg-h6 text-md-body-1 text-sm-body-1">Хорошо знаю Java, на прошлом месте работы в основном занимался разработкой консольных/десктопных приложений на данном языке
|
<p style="text-indent: 1em; text-align: justify" class="pb-5">Хорошо знаю Java, на прошлом месте работы в основном занимался разработкой консольных/десктопных приложений на данном языке
|
||||||
(муниципальный сектор). Планирую в ближайшее время изучить Spring Framework. В работе активно использую Git. Из СУБД плотно работаю с
|
(муниципальный сектор). Планирую в ближайшее время изучить Spring Framework. В работе активно использую Git. Из СУБД плотно работаю с
|
||||||
MySQL, Postgresql. Иногда по работе приходилось писать или дорабатывать небольшие сайты на HTML+CSS+JS (и иногда PHP) и
|
MySQL, Postgresql. Иногда по работе приходилось писать или дорабатывать небольшие сайты на HTML+CSS+JS (и иногда PHP) и
|
||||||
дорабатывать веб-приложение на ASP.NET (Жил. фонд). На текущем месте работы занимаюсь разработкой, доработкой и поддержкой сайтов и веб-приложений
|
дорабатывать веб-приложение на ASP.NET (Жил. фонд). На текущем месте работы занимаюсь разработкой, доработкой и поддержкой сайтов и веб-приложений
|
||||||
|
|
|
@ -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-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">
|
<v-table class="main-sheet-bg pl-5" :class="[this.isWide ? 'w-25' : 'w-66']" 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>
|
||||||
|
@ -20,8 +20,8 @@
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</v-table>
|
</v-table>
|
||||||
<div v-if="this.isMore700" class="w-33">
|
<div class="w-33">
|
||||||
<v-img class="image-gradient" src="./images/resume.png"></v-img>
|
<v-img class="image-gradient" src="./resume.png"></v-img>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -38,8 +38,7 @@ export default {
|
||||||
},
|
},
|
||||||
windowHeight: document.documentElement.clientHeight,
|
windowHeight: document.documentElement.clientHeight,
|
||||||
windowWidth: document.documentElement.clientWidth,
|
windowWidth: document.documentElement.clientWidth,
|
||||||
isWide: window.innerWidth > 1920,
|
isWide: window.innerWidth > 1000,
|
||||||
isMore700: window.innerWidth > 700,
|
|
||||||
tableClass: 'w-25'
|
tableClass: 'w-25'
|
||||||
}),
|
}),
|
||||||
created() {
|
created() {
|
||||||
|
@ -53,18 +52,13 @@ export default {
|
||||||
myEventHandler(e) {
|
myEventHandler(e) {
|
||||||
this.windowHeight = document.documentElement.clientHeight;
|
this.windowHeight = document.documentElement.clientHeight;
|
||||||
this.windowWidth = document.documentElement.clientWidth;
|
this.windowWidth = document.documentElement.clientWidth;
|
||||||
if (this.windowWidth < 1750){
|
if (this.windowWidth < 1000){
|
||||||
this.isWide = false;
|
this.isWide = false;
|
||||||
this.tableClass = 'w-66';
|
this.tableClass = 'w-66';
|
||||||
} else {
|
} else {
|
||||||
this.isWide = true;
|
this.isWide = true;
|
||||||
this.tableClass = 'w-33';
|
this.tableClass = 'w-33';
|
||||||
}
|
}
|
||||||
if (this.windowWidth < 700){
|
|
||||||
this.isMore700 = false;
|
|
||||||
} else {
|
|
||||||
this.isMore700 = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,22 +6,6 @@
|
||||||
<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>
|
||||||
|
|
|
@ -6,22 +6,6 @@
|
||||||
<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>
|
||||||
|
|
|
@ -18,5 +18,3 @@ Route::get('/', 'App\Http\Controllers\Api\V1\CaesarController@index')->name('cae
|
||||||
Route::get('/links', 'App\Http\Controllers\LinksController@index')->name('links');
|
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::post('/rating', 'App\Http\Controllers\RatingController@index')->name('rating');
|
|
||||||
|
|
|
@ -25,14 +25,6 @@ Route::get('/resume', function () {
|
||||||
return view('resume/resume');
|
return view('resume/resume');
|
||||||
});
|
});
|
||||||
|
|
||||||
Route::get('/basya', function () {
|
|
||||||
return view('basya/basya');
|
|
||||||
});
|
|
||||||
|
|
||||||
Route::get('/friday', function () {
|
|
||||||
return view('friday/friday');
|
|
||||||
});
|
|
||||||
|
|
||||||
Route::get('/download/{file}', 'App\Http\Controllers\DownloadController@download');
|
Route::get('/download/{file}', 'App\Http\Controllers\DownloadController@download');
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -6,14 +6,7 @@ export default defineConfig({
|
||||||
plugins: [
|
plugins: [
|
||||||
vue(),
|
vue(),
|
||||||
laravel({
|
laravel({
|
||||||
input: [
|
input: ['resources/css/app.css', 'resources/app.js', 'resources/welcome.js', 'resources/caesar.js'],
|
||||||
'resources/css/app.css',
|
|
||||||
'resources/app.js',
|
|
||||||
'resources/welcome.js',
|
|
||||||
'resources/caesar.js',
|
|
||||||
'resources/basya.js',
|
|
||||||
'resources/friday.js'
|
|
||||||
],
|
|
||||||
refresh: true,
|
refresh: true,
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
|
|