增加note

This commit is contained in:
Tony Zhang 2022-05-08 01:40:25 +08:00
parent bc09cf9f24
commit dd977db9a4
18 changed files with 442 additions and 12 deletions

View File

@ -0,0 +1,43 @@
<?php
namespace App\Http\Controllers;
use App\Models\Note;
use App\Models\Project;
use Illuminate\Http\Request;
class NoteController extends Controller
{
public function createOrEdit(Note $note)
{
$request = request();
$projectId = $request->get('project_id');
$project = null;
if($projectId) {
$project = Project::find($projectId);
}
return view('note.edit', ['note' => $note, 'project' => $project]);
}
public function create()
{
return $this->createOrEdit(app(Note::class));
}
public function edit($id)
{
return $this->createOrEdit(Note::find($id));
}
public function store(Request $request)
{
$note = Note::create($request->all());
return redirect()->route('adm.project.show', [$note->project->id]);
}
public function destroy($id)
{
Note::find($id)->delete();
return response()->json([]);
}
}

View File

@ -57,7 +57,8 @@ public function store(ProjectCreateRequest $request)
public function show($id) public function show($id)
{ {
$project = Project::find($id); $project = Project::find($id);
return view('project.view', ['project' => $project]); $notes = $project->notes()->latest()->get();
return view('project.view', ['project' => $project, 'notes' => $notes]);
} }
public function edit($id) public function edit($id)

37
app/Models/Note.php Normal file
View File

@ -0,0 +1,37 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
/**
* App\Models\Note
*
* @property int $id
* @property int $project_id
* @property string $content
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \App\Models\Project|null $project
* @method static \Illuminate\Database\Eloquent\Builder|Note newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Note newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Note query()
* @method static \Illuminate\Database\Eloquent\Builder|Note whereContent($value)
* @method static \Illuminate\Database\Eloquent\Builder|Note whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|Note whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Note whereProjectId($value)
* @method static \Illuminate\Database\Eloquent\Builder|Note whereUpdatedAt($value)
* @mixin \Eloquent
*/
class Note extends Model
{
use HasFactory;
protected $fillable = ['content', 'project_id'];
public function project()
{
return $this->belongsTo(Project::class);
}
}

View File

@ -42,6 +42,8 @@
* @property-read \App\Models\Client|null $client * @property-read \App\Models\Client|null $client
* @property-read int $paid_amount * @property-read int $paid_amount
* @property-read int $unpaid_amount * @property-read int $unpaid_amount
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Note[] $notes
* @property-read int|null $notes_count
*/ */
class Project extends Model class Project extends Model
{ {
@ -84,4 +86,9 @@ public function client()
{ {
return $this->belongsTo(Client::class); return $this->belongsTo(Client::class);
} }
public function notes()
{
return $this->hasMany(Note::class);
}
} }

View File

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

View File

@ -21,6 +21,8 @@
}, },
"dependencies": { "dependencies": {
"@popperjs/core": "^2.11.5", "@popperjs/core": "^2.11.5",
"bootstrap-icons": "^1.8.1" "bootstrap-icons": "^1.8.1",
"jquery": "^3.6.0",
"vue": "^3.2.33"
} }
} }

View File

@ -18031,3 +18031,44 @@ .bi-filetype-pptx::before {
.bi-filetype-xlsx::before { .bi-filetype-xlsx::before {
content: "\f793"; content: "\f793";
} }
.notes .note {
position: relative;
background: #eee;
}
.notes .note .content {
font-size: 1rem;
}
.notes .note .time {
font-size: 0.5rem;
text-align: right;
}
.notes .note .delete-wrapper {
display: none;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
align-items: center;
justify-content: center;
cursor: pointer;
}
.notes .note .delete-wrapper .bg {
background: red;
opacity: 0.7;
width: 100%;
height: 100%;
}
.notes .note .delete-wrapper .delete {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: white;
font-weight: bold;
font-size: 1.2rem;
}
.notes .note:hover .delete-wrapper {
display: flex;
}

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
{ {
"/js/app.js": "/js/app.js?id=14f84891603743da9fbfc6699a3f4297", "/js/app.js": "/js/app.js?id=c98255a330e87e9652070f2535faf5ac",
"/css/app.css": "/css/app.css?id=0b6616382c4cfb1ce9f2f3abb01ac21e" "/css/app.css": "/css/app.css?id=f73ebf2d70c6a8e9d42d21eebc12e29c"
} }

View File

@ -12,6 +12,7 @@ window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
import 'bootstrap' import 'bootstrap'
window.$ = window.jqeury = require('jquery')
/** /**
* Echo exposes an expressive API for subscribing to channels and listening * Echo exposes an expressive API for subscribing to channels and listening
* for events that are broadcast by Laravel. Echo and event broadcasting * for events that are broadcast by Laravel. Echo and event broadcasting

View File

@ -1,2 +1,47 @@
@import "~bootstrap"; @import "~bootstrap";
@import "~bootstrap-icons"; @import "~bootstrap-icons";
.notes {
.note {
position: relative;
background: #eee;
.content {
font-size: 1rem;
}
.time {
font-size: .5rem;
text-align: right;
}
.delete-wrapper {
display: none;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
align-items: center;
justify-content: center;
cursor: pointer;
.bg {
background: red;
opacity: .7;
width: 100%;
height: 100%;
}
.delete {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: white;
font-weight: bold;
font-size: 1.2rem;
}
}
&:hover {
.delete-wrapper {
display: flex;
}
}
}
}

View File

@ -12,7 +12,7 @@
</x-form-control-input> </x-form-control-input>
@break @break
@case('text_area') @case('text_area')
<x-form-control-text-area name="{{ $attr }}" id="{{ $id }}" :value="$value"></x-form-control-text-area> <x-form-control-text-area name="{{ $attr }}" id="{{ $id }}" :value="$value" :required="$required"></x-form-control-text-area>
@break @break
@case('select') @case('select')
<x-form-control-select name="{{ $attr }}" id="{{ $id }}" :value="$value" :options="$options" :multiple="$multiple"></x-form-control-select> <x-form-control-select name="{{ $attr }}" id="{{ $id }}" :value="$value" :options="$options" :multiple="$multiple"></x-form-control-select>

View File

@ -10,7 +10,7 @@
<title>{{ config('app.name', 'Laravel') }}</title> <title>{{ config('app.name', 'Laravel') }}</title>
<!-- Scripts --> <!-- Scripts -->
<script src="{{ mix('js/app.js') }}" defer></script> <script src="{{ mix('js/app.js') }}"></script>
<!-- Fonts --> <!-- Fonts -->
<link rel="dns-prefetch" href="//fonts.gstatic.com"> <link rel="dns-prefetch" href="//fonts.gstatic.com">
@ -33,6 +33,7 @@
<div class="collapse navbar-collapse" id="navbarSupportedContent"> <div class="collapse navbar-collapse" id="navbarSupportedContent">
<!-- Left Side Of Navbar --> <!-- Left Side Of Navbar -->
<ul class="navbar-nav me-auto"> <ul class="navbar-nav me-auto">
@auth
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="{{ route('adm.client.index') }}">Client</a> <a class="nav-link" href="{{ route('adm.client.index') }}">Client</a>
</li> </li>
@ -42,6 +43,7 @@
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="{{ route('adm.payment.index') }}">Payment</a> <a class="nav-link" href="{{ route('adm.payment.index') }}">Payment</a>
</li> </li>
@endauth
</ul> </ul>
<!-- Right Side Of Navbar --> <!-- Right Side Of Navbar -->

View File

@ -0,0 +1,43 @@
<?php
/** @var \App\Models\Note $note */
?>
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-6">
<form
action="{{ $note->id ? route('adm.note.update', [$note->id]) : route('adm.note.store') }}"
method="post">
@csrf
@if($note->id)
@method('PUT')
<div class="row mb-3">
<div class="col">
<h1>編輯 Note: {{ $note->project->title }} {{ $note->project->id }}</h1>
</div>
</div>
@else
<div class="row mb-3">
<div class="col">
<h1>新增 Note: {{ $project->title }}</h1>
<input type="hidden" name="project_id" value="{{ $project->id }}">
</div>
</div>
@endif
<x-success-alert></x-success-alert>
<x-validation-alert></x-validation-alert>
<x-model-form-control-group :model="$note" attr="content" type="text_area" label="內容" :required="true"></x-model-form-control-group>
<button type="submit" class="btn btn-success">
@if($note->id)
Update
@else
Create
@endif
</button>
</form>
</div>
</div>
</div>
@endsection

View File

@ -26,7 +26,7 @@
<x-model-form-control-group :model="$project" attr="status" type="select" label="狀態" :options="$projectStatuses" :required="true"></x-model-form-control-group> <x-model-form-control-group :model="$project" attr="status" type="select" label="狀態" :options="$projectStatuses" :required="true"></x-model-form-control-group>
<x-model-form-control-group :model="$project" attr="begin_at" type="input" input-type="date" label="開始日"></x-model-form-control-group> <x-model-form-control-group :model="$project" attr="begin_at" type="input" input-type="date" label="開始日"></x-model-form-control-group>
<x-model-form-control-group :model="$project" attr="end_at" type="input" input-type="date" label="結束日"></x-model-form-control-group> <x-model-form-control-group :model="$project" attr="end_at" type="input" input-type="date" label="結束日"></x-model-form-control-group>
<x-model-form-control-group :model="$project" attr="price" type="input" input-type="number" label="金額"></x-model-form-control-group> <x-model-form-control-group :model="$project" attr="price" type="input" input-type="number" label="金額" :required="true"></x-model-form-control-group>
<x-model-form-control-group :model="$project" attr="client_id" type="select" label="客戶" :options="$clients" :required="true"></x-model-form-control-group> <x-model-form-control-group :model="$project" attr="client_id" type="select" label="客戶" :options="$clients" :required="true"></x-model-form-control-group>
<x-model-form-control-group :model="$project" attr="parent_project_id" type="select" label="父專案" :options="$projects"></x-model-form-control-group> <x-model-form-control-group :model="$project" attr="parent_project_id" type="select" label="父專案" :options="$projects"></x-model-form-control-group>
<button type="submit" class="btn btn-success"> <button type="submit" class="btn btn-success">

View File

@ -1,9 +1,9 @@
@extends('layouts.app') @extends('layouts.app')
@section('content') @section('content')
<div class="container"> <div class="container" id="app">
<div class="row justify-content-center"> <div class="row justify-content-center">
<div class="col"> <div class="col-9">
<table class="table table-bordered table-hover table-sm table-striped"> <table class="table table-bordered table-hover table-sm table-striped">
<tbody> <tbody>
<tr> <tr>
@ -73,6 +73,41 @@ class="btn btn-sm btn-outline-success"><i class="bi bi-plus"></i></a></th>
</tbody> </tbody>
</table> </table>
</div> </div>
<div class="col-3">
<div>Notes
<a href="{{ route('adm.note.create', ['project_id' => $project->id]) }}" class="btn btn-success btn-sm">
<i class="bi bi-plus"></i>
</a>
</div>
<div class="notes">
<?php foreach ($notes as $note): ?>
<div class="note p-2 my-2">
<div class="content">
{!! nl2br($note->content) !!}
</div>
<div class="time">
{{ $note->created_at }}
</div>
<div class="delete-wrapper" data-id="{{ $note->id }}">
<div class="bg"></div>
<i class="delete bi bi-trash3"></i>
</div> </div>
</div> </div>
<?php endforeach; ?>
</div>
</div>
</div>
</div>
<script>
$('.delete-wrapper').on('click', (e) => {
if(confirm('確定刪除?')) {
let $this = $(e.currentTarget),
id = $this.data('id')
axios.delete(`/adm/note/${id}`).then(resp => {
$this.closest('.note').remove()
})
}
})
</script>
@endsection @endsection

View File

@ -29,4 +29,6 @@
Route::resource('project', \App\Http\Controllers\ProjectController::class); Route::resource('project', \App\Http\Controllers\ProjectController::class);
Route::resource('payment', \App\Http\Controllers\PaymentController::class); Route::resource('payment', \App\Http\Controllers\PaymentController::class);
Route::resource('note', \App\Http\Controllers\NoteController::class)->except(['show']);
}); });

132
yarn.lock
View File

@ -260,7 +260,7 @@
chalk "^2.0.0" chalk "^2.0.0"
js-tokens "^4.0.0" js-tokens "^4.0.0"
"@babel/parser@^7.1.0", "@babel/parser@^7.16.7", "@babel/parser@^7.17.10": "@babel/parser@^7.1.0", "@babel/parser@^7.16.4", "@babel/parser@^7.16.7", "@babel/parser@^7.17.10":
version "7.17.10" version "7.17.10"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.10.tgz#873b16db82a8909e0fbd7f115772f4b739f6ce78" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.10.tgz#873b16db82a8909e0fbd7f115772f4b739f6ce78"
integrity sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ== integrity sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==
@ -1213,6 +1213,96 @@
dependencies: dependencies:
"@types/node" "*" "@types/node" "*"
"@vue/compiler-core@3.2.33":
version "3.2.33"
resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.33.tgz#e915d59cce85898f5c5cfebe4c09e539278c3d59"
integrity sha512-AAmr52ji3Zhk7IKIuigX2osWWsb2nQE5xsdFYjdnmtQ4gymmqXbjLvkSE174+fF3A3kstYrTgGkqgOEbsdLDpw==
dependencies:
"@babel/parser" "^7.16.4"
"@vue/shared" "3.2.33"
estree-walker "^2.0.2"
source-map "^0.6.1"
"@vue/compiler-dom@3.2.33":
version "3.2.33"
resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.33.tgz#6db84296f949f18e5d3e7fd5e80f943dbed7d5ec"
integrity sha512-GhiG1C8X98Xz9QUX/RlA6/kgPBWJkjq0Rq6//5XTAGSYrTMBgcLpP9+CnlUg1TFxnnCVughAG+KZl28XJqw8uQ==
dependencies:
"@vue/compiler-core" "3.2.33"
"@vue/shared" "3.2.33"
"@vue/compiler-sfc@3.2.33":
version "3.2.33"
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.33.tgz#7ce01dc947a8b76c099811dc6ca58494d4dc773d"
integrity sha512-H8D0WqagCr295pQjUYyO8P3IejM3vEzeCO1apzByAEaAR/WimhMYczHfZVvlCE/9yBaEu/eu9RdiWr0kF8b71Q==
dependencies:
"@babel/parser" "^7.16.4"
"@vue/compiler-core" "3.2.33"
"@vue/compiler-dom" "3.2.33"
"@vue/compiler-ssr" "3.2.33"
"@vue/reactivity-transform" "3.2.33"
"@vue/shared" "3.2.33"
estree-walker "^2.0.2"
magic-string "^0.25.7"
postcss "^8.1.10"
source-map "^0.6.1"
"@vue/compiler-ssr@3.2.33":
version "3.2.33"
resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.33.tgz#3e820267e4eea48fde9519f006dedca3f5e42e71"
integrity sha512-XQh1Xdk3VquDpXsnoCd7JnMoWec9CfAzQDQsaMcSU79OrrO2PNR0ErlIjm/mGq3GmBfkQjzZACV+7GhfRB8xMQ==
dependencies:
"@vue/compiler-dom" "3.2.33"
"@vue/shared" "3.2.33"
"@vue/reactivity-transform@3.2.33":
version "3.2.33"
resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.33.tgz#286063f44ca56150ae9b52f8346a26e5913fa699"
integrity sha512-4UL5KOIvSQb254aqenW4q34qMXbfZcmEsV/yVidLUgvwYQQ/D21bGX3DlgPUGI3c4C+iOnNmDCkIxkILoX/Pyw==
dependencies:
"@babel/parser" "^7.16.4"
"@vue/compiler-core" "3.2.33"
"@vue/shared" "3.2.33"
estree-walker "^2.0.2"
magic-string "^0.25.7"
"@vue/reactivity@3.2.33":
version "3.2.33"
resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.33.tgz#c84eedb5225138dbfc2472864c151d3efbb4b673"
integrity sha512-62Sq0mp9/0bLmDuxuLD5CIaMG2susFAGARLuZ/5jkU1FCf9EDbwUuF+BO8Ub3Rbodx0ziIecM/NsmyjardBxfQ==
dependencies:
"@vue/shared" "3.2.33"
"@vue/runtime-core@3.2.33":
version "3.2.33"
resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.33.tgz#2df8907c85c37c3419fbd1bdf1a2df097fa40df2"
integrity sha512-N2D2vfaXsBPhzCV3JsXQa2NECjxP3eXgZlFqKh4tgakp3iX6LCGv76DLlc+IfFZq+TW10Y8QUfeihXOupJ1dGw==
dependencies:
"@vue/reactivity" "3.2.33"
"@vue/shared" "3.2.33"
"@vue/runtime-dom@3.2.33":
version "3.2.33"
resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.33.tgz#123b8969247029ea0d9c1983676d4706a962d848"
integrity sha512-LSrJ6W7CZTSUygX5s8aFkraDWlO6K4geOwA3quFF2O+hC3QuAMZt/0Xb7JKE3C4JD4pFwCSO7oCrZmZ0BIJUnw==
dependencies:
"@vue/runtime-core" "3.2.33"
"@vue/shared" "3.2.33"
csstype "^2.6.8"
"@vue/server-renderer@3.2.33":
version "3.2.33"
resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.33.tgz#4b45d6d2ae10ea4e3d2cf8e676804cf60f331979"
integrity sha512-4jpJHRD4ORv8PlbYi+/MfP8ec1okz6rybe36MdpkDrGIdEItHEUyaHSKvz+ptNEyQpALmmVfRteHkU9F8vxOew==
dependencies:
"@vue/compiler-ssr" "3.2.33"
"@vue/shared" "3.2.33"
"@vue/shared@3.2.33":
version "3.2.33"
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.33.tgz#69a8c99ceb37c1b031d5cc4aec2ff1dc77e1161e"
integrity sha512-UBc1Pg1T3yZ97vsA2ueER0F6GbJebLHYlEi4ou1H5YL4KWvMOOWwpYo9/QpWq93wxKG6Wo13IY74Hcn/f7c7Bg==
"@webassemblyjs/ast@1.11.1": "@webassemblyjs/ast@1.11.1":
version "1.11.1" version "1.11.1"
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7"
@ -2221,6 +2311,11 @@ csso@^4.2.0:
dependencies: dependencies:
css-tree "^1.1.2" css-tree "^1.1.2"
csstype@^2.6.8:
version "2.6.20"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda"
integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==
debug@2.6.9: debug@2.6.9:
version "2.6.9" version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@ -2486,6 +2581,11 @@ estraverse@^5.2.0:
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
estree-walker@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
esutils@^2.0.2: esutils@^2.0.2:
version "2.0.3" version "2.0.3"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
@ -3161,6 +3261,11 @@ jest-worker@^27.4.5:
merge-stream "^2.0.0" merge-stream "^2.0.0"
supports-color "^8.0.0" supports-color "^8.0.0"
jquery@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470"
integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==
js-tokens@^4.0.0: js-tokens@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@ -3367,6 +3472,13 @@ lru-cache@^6.0.0:
dependencies: dependencies:
yallist "^4.0.0" yallist "^4.0.0"
magic-string@^0.25.7:
version "0.25.9"
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c"
integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
dependencies:
sourcemap-codec "^1.4.8"
make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
@ -4113,7 +4225,7 @@ postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
postcss@^8.1.14, postcss@^8.2.14, postcss@^8.2.15: postcss@^8.1.10, postcss@^8.1.14, postcss@^8.2.14, postcss@^8.2.15:
version "8.4.13" version "8.4.13"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.13.tgz#7c87bc268e79f7f86524235821dfdf9f73e5d575" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.13.tgz#7c87bc268e79f7f86524235821dfdf9f73e5d575"
integrity sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA== integrity sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==
@ -4650,6 +4762,11 @@ source-map@~0.8.0-beta.0:
dependencies: dependencies:
whatwg-url "^7.0.0" whatwg-url "^7.0.0"
sourcemap-codec@^1.4.8:
version "1.4.8"
resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
spdy-transport@^3.0.0: spdy-transport@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31"
@ -4991,6 +5108,17 @@ vue-style-loader@^4.1.3:
hash-sum "^1.0.2" hash-sum "^1.0.2"
loader-utils "^1.0.2" loader-utils "^1.0.2"
vue@^3.2.33:
version "3.2.33"
resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.33.tgz#7867eb16a3293a28c4d190a837bc447878bd64c2"
integrity sha512-si1ExAlDUrLSIg/V7D/GgA4twJwfsfgG+t9w10z38HhL/HA07132pUQ2KuwAo8qbCyMJ9e6OqrmWrOCr+jW7ZQ==
dependencies:
"@vue/compiler-dom" "3.2.33"
"@vue/compiler-sfc" "3.2.33"
"@vue/runtime-dom" "3.2.33"
"@vue/server-renderer" "3.2.33"
"@vue/shared" "3.2.33"
watchpack@^2.3.1: watchpack@^2.3.1:
version "2.3.1" version "2.3.1"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.3.1.tgz#4200d9447b401156eeca7767ee610f8809bc9d25" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.3.1.tgz#4200d9447b401156eeca7767ee610f8809bc9d25"