17 | */
18 | public function definition()
19 | {
20 | return [
21 | 'name' => fake()->name(),
22 | 'email' => fake()->safeEmail(),
23 | 'email_verified_at' => now(),
24 | 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
25 | 'remember_token' => Str::random(10),
26 | ];
27 | }
28 |
29 | /**
30 | * Indicate that the model's email address should be unverified.
31 | *
32 | * @return static
33 | */
34 | public function unverified()
35 | {
36 | return $this->state(function (array $attributes) {
37 | return [
38 | 'email_verified_at' => null,
39 | ];
40 | });
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/database/migrations/2014_10_12_000000_create_users_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name');
19 | $table->string('email')->unique();
20 | $table->timestamp('email_verified_at')->nullable();
21 | $table->string('password');
22 | $table->rememberToken();
23 | $table->timestamps();
24 | });
25 | }
26 |
27 | /**
28 | * Reverse the migrations.
29 | *
30 | * @return void
31 | */
32 | public function down()
33 | {
34 | Schema::dropIfExists('users');
35 | }
36 | };
37 |
--------------------------------------------------------------------------------
/database/migrations/2014_10_12_100000_create_password_resets_table.php:
--------------------------------------------------------------------------------
1 | string('email')->index();
18 | $table->string('token');
19 | $table->timestamp('created_at')->nullable();
20 | });
21 | }
22 |
23 | /**
24 | * Reverse the migrations.
25 | *
26 | * @return void
27 | */
28 | public function down()
29 | {
30 | Schema::dropIfExists('password_resets');
31 | }
32 | };
33 |
--------------------------------------------------------------------------------
/database/migrations/2019_08_19_000000_create_failed_jobs_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('uuid')->unique();
19 | $table->text('connection');
20 | $table->text('queue');
21 | $table->longText('payload');
22 | $table->longText('exception');
23 | $table->timestamp('failed_at')->useCurrent();
24 | });
25 | }
26 |
27 | /**
28 | * Reverse the migrations.
29 | *
30 | * @return void
31 | */
32 | public function down()
33 | {
34 | Schema::dropIfExists('failed_jobs');
35 | }
36 | };
37 |
--------------------------------------------------------------------------------
/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->morphs('tokenable');
19 | $table->string('name');
20 | $table->string('token', 64)->unique();
21 | $table->text('abilities')->nullable();
22 | $table->timestamp('last_used_at')->nullable();
23 | $table->timestamps();
24 | });
25 | }
26 |
27 | /**
28 | * Reverse the migrations.
29 | *
30 | * @return void
31 | */
32 | public function down()
33 | {
34 | Schema::dropIfExists('personal_access_tokens');
35 | }
36 | };
37 |
--------------------------------------------------------------------------------
/database/migrations/2022_07_25_155035_create_inertia_tests_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('title');
19 | $table->string('content');
20 | $table->timestamps();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::dropIfExists('inertia_tests');
32 | }
33 | };
34 |
--------------------------------------------------------------------------------
/database/migrations/2022_08_02_151056_create_items_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name');
19 | $table->string('memo')->nullable();
20 | $table->integer('price');
21 | $table->boolean('is_selling')->default(true);
22 | $table->timestamps();
23 | });
24 | }
25 |
26 | /**
27 | * Reverse the migrations.
28 | *
29 | * @return void
30 | */
31 | public function down()
32 | {
33 | Schema::dropIfExists('items');
34 | }
35 | };
36 |
--------------------------------------------------------------------------------
/database/migrations/2022_08_08_115719_create_customers_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->string('name');
19 | $table->string('kana');
20 | $table->string('tel')->unique();
21 | $table->string('email');
22 | $table->string('postcode');
23 | $table->string('address');
24 | $table->date('birthday')->nullable();
25 | $table->tinyInteger('gender'); // 0男性, 1女性、2その他
26 | $table->text('memo')->nullable();
27 | $table->timestamps();
28 |
29 | });
30 | }
31 |
32 | /**
33 | * Reverse the migrations.
34 | *
35 | * @return void
36 | */
37 | public function down()
38 | {
39 | Schema::dropIfExists('customers');
40 | }
41 | };
42 |
--------------------------------------------------------------------------------
/database/migrations/2022_08_16_125422_create_purchases_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->foreignId('customer_id')->constrained()->onUpdate('cascade');
19 | $table->boolean('status');
20 | $table->timestamps();
21 |
22 | });
23 | }
24 |
25 | /**
26 | * Reverse the migrations.
27 | *
28 | * @return void
29 | */
30 | public function down()
31 | {
32 | Schema::dropIfExists('purchases');
33 | }
34 | };
35 |
--------------------------------------------------------------------------------
/database/migrations/2022_08_17_112754_create_item_purchase_table.php:
--------------------------------------------------------------------------------
1 | id();
18 | $table->foreignId('item_id')->constrained()->onUpdate('cascade');;
19 | $table->foreignId('purchase_id')->constrained()->onUpdate('cascade');;
20 | $table->integer('quantity');
21 | $table->timestamps();
22 |
23 | });
24 | }
25 |
26 | /**
27 | * Reverse the migrations.
28 | *
29 | * @return void
30 | */
31 | public function down()
32 | {
33 | Schema::dropIfExists('item_purchase');
34 | }
35 | };
36 |
--------------------------------------------------------------------------------
/database/migrations/2022_09_03_043755_create_ranks_table.php:
--------------------------------------------------------------------------------
1 | integer('rank');
18 | });
19 | }
20 |
21 | /**
22 | * Reverse the migrations.
23 | *
24 | * @return void
25 | */
26 | public function down()
27 | {
28 | Schema::dropIfExists('ranks');
29 | }
30 | };
31 |
--------------------------------------------------------------------------------
/database/seeders/CustomerSeeder.php:
--------------------------------------------------------------------------------
1 | call([
19 | UserSeeder::class,
20 | ItemSeeder::class,
21 | RankSeeder::class
22 | ]);
23 |
24 | \App\Models\Customer::factory(1000)->create();
25 |
26 | $items = \App\Models\Item::all();
27 |
28 | Purchase::factory(30000)->create()
29 | ->each(function(Purchase $purchase) use ($items) {
30 | $purchase->items()->attach(
31 | $items->random(rand(1,3))->pluck('id')->toArray(),
32 | [ 'quantity' => rand(1, 5) ]
33 | );
34 | });
35 |
36 | // \App\Models\User::factory(10)->create();
37 |
38 | // \App\Models\User::factory()->create([
39 | // 'name' => 'Test User',
40 | // 'email' => 'test@example.com',
41 | // ]);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/database/seeders/ItemSeeder.php:
--------------------------------------------------------------------------------
1 | insert([
20 | [
21 | 'name' => 'カット',
22 | 'memo' => 'カットの詳細',
23 | 'price' => 6000
24 | ],
25 | [
26 | 'name' => 'カラー',
27 | 'memo' => 'カラーの詳細',
28 | 'price' => 8000
29 | ],[
30 | 'name' => 'パーマ(カット込)',
31 | 'memo' => 'パーマの詳細',
32 | 'price' => 13000
33 | ]
34 | ]);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/database/seeders/PurchaseSeeder.php:
--------------------------------------------------------------------------------
1 | insert([
19 | ['rank' => 1 ],
20 | ['rank' => 2 ],
21 | ['rank' => 3 ],
22 | ['rank' => 4 ],
23 | ['rank' => 5 ],
24 | ]);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/database/seeders/UserSeeder.php:
--------------------------------------------------------------------------------
1 | insert([
20 | 'name' => 'test',
21 | 'email' => 'test@test.com',
22 | 'password' => Hash::make('password123'),
23 | ]);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/jsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "jsx": "preserve",
4 | "baseUrl": ".",
5 | "paths": {
6 | "@/*": ["resources/js/*"]
7 | },
8 | "checkJs" : false
9 | },
10 | "exclude": ["node_modules", "public"]
11 | }
12 |
--------------------------------------------------------------------------------
/lang/en/auth.php:
--------------------------------------------------------------------------------
1 | 'These credentials do not match our records.',
17 | 'password' => 'The provided password is incorrect.',
18 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
19 |
20 | ];
21 |
--------------------------------------------------------------------------------
/lang/en/pagination.php:
--------------------------------------------------------------------------------
1 | '« Previous',
17 | 'next' => 'Next »',
18 |
19 | ];
20 |
--------------------------------------------------------------------------------
/lang/en/passwords.php:
--------------------------------------------------------------------------------
1 | 'Your password has been reset!',
17 | 'sent' => 'We have emailed your password reset link!',
18 | 'throttled' => 'Please wait before retrying.',
19 | 'token' => 'This password reset token is invalid.',
20 | 'user' => "We can't find a user with that email address.",
21 |
22 | ];
23 |
--------------------------------------------------------------------------------
/lang/ja/auth.php:
--------------------------------------------------------------------------------
1 | 'ログイン情報が登録されていません。',
17 | 'throttle' => 'ログインに続けて失敗しています。:seconds秒後に再度お試しください。',
18 |
19 | ];
--------------------------------------------------------------------------------
/lang/ja/pagination.php:
--------------------------------------------------------------------------------
1 | '« 前',
17 | 'next' => '次 »',
18 |
19 | ];
--------------------------------------------------------------------------------
/lang/ja/passwords.php:
--------------------------------------------------------------------------------
1 | 'パスワードをリセットしました。',
17 | 'sent' => 'パスワードリセットメールを送信しました。',
18 | 'throttled' => 'しばらく再試行はお待ちください。',
19 | 'token' => 'このパスワードリセットトークンは無効です。',
20 | 'user' => "メールアドレスに一致するユーザーは存在していません。",
21 |
22 | ];
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "scripts": {
4 | "dev": "vite",
5 | "build": "vite build"
6 | },
7 | "devDependencies": {
8 | "@inertiajs/inertia": "^0.11.0",
9 | "@inertiajs/inertia-vue3": "^0.6.0",
10 | "@inertiajs/progress": "^0.2.7",
11 | "@tailwindcss/forms": "^0.5.2",
12 | "@vitejs/plugin-vue": "^3.0.0",
13 | "autoprefixer": "^10.4.2",
14 | "axios": "^0.27",
15 | "laravel-vite-plugin": "^0.5.0",
16 | "lodash": "^4.17.19",
17 | "postcss": "^8.4.6",
18 | "tailwindcss": "^3.1.0",
19 | "vite": "^3.0.0",
20 | "vue": "^3.2.31"
21 | },
22 | "dependencies": {
23 | "chart.js": "^3.9.1",
24 | "dayjs": "^1.11.5",
25 | "micromodal": "^0.4.10",
26 | "vue-chart-3": "^3.1.8",
27 | "yubinbango-core2": "^0.6.3"
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 | ./tests/Unit
10 |
11 |
12 | ./tests/Feature
13 |
14 |
15 |
16 |
17 | ./app
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/public/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aokitashipro/laravel_uCRM/0ff5a9087ead6c6c7b6d938c0634e84fe0355602/public/.DS_Store
--------------------------------------------------------------------------------
/public/.htaccess:
--------------------------------------------------------------------------------
1 |
2 |
3 | Options -MultiViews -Indexes
4 |
5 |
6 | RewriteEngine On
7 |
8 | # Handle Authorization Header
9 | RewriteCond %{HTTP:Authorization} .
10 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
11 |
12 | # Redirect Trailing Slashes If Not A Folder...
13 | RewriteCond %{REQUEST_FILENAME} !-d
14 | RewriteCond %{REQUEST_URI} (.+)/$
15 | RewriteRule ^ %1 [L,R=301]
16 |
17 | # Send Requests To Front Controller...
18 | RewriteCond %{REQUEST_FILENAME} !-d
19 | RewriteCond %{REQUEST_FILENAME} !-f
20 | RewriteRule ^ index.php [L]
21 |
22 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aokitashipro/laravel_uCRM/0ff5a9087ead6c6c7b6d938c0634e84fe0355602/public/favicon.ico
--------------------------------------------------------------------------------
/public/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aokitashipro/laravel_uCRM/0ff5a9087ead6c6c7b6d938c0634e84fe0355602/public/images/logo.png
--------------------------------------------------------------------------------
/public/index.php:
--------------------------------------------------------------------------------
1 | make(Kernel::class);
50 |
51 | $response = $kernel->handle(
52 | $request = Request::capture()
53 | )->send();
54 |
55 | $kernel->terminate($request, $response);
56 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 |
--------------------------------------------------------------------------------
/resources/css/app.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/resources/css/micromodal.css:
--------------------------------------------------------------------------------
1 | /**************************\
2 | Basic Modal Styles
3 | \**************************/
4 |
5 | .modal {
6 | font-family: -apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica neue,helvetica,ubuntu,roboto,noto,segoe ui,arial,sans-serif;
7 | }
8 |
9 | .modal__overlay {
10 | position: fixed;
11 | top: 0;
12 | left: 0;
13 | right: 0;
14 | bottom: 0;
15 | background: rgba(0,0,0,0.6);
16 | display: flex;
17 | justify-content: center;
18 | align-items: center;
19 | }
20 |
21 | .modal__container {
22 | background-color: #fff;
23 | padding: 30px;
24 | max-width: 1200px;
25 | max-height: 100vh;
26 | border-radius: 4px;
27 | overflow-y: auto;
28 | box-sizing: border-box;
29 | }
30 |
31 | .modal__header {
32 | display: flex;
33 | justify-content: space-between;
34 | align-items: center;
35 | }
36 |
37 | .modal__title {
38 | margin-top: 0;
39 | margin-bottom: 0;
40 | font-weight: 600;
41 | font-size: 1.25rem;
42 | line-height: 1.25;
43 | color: #00449e;
44 | box-sizing: border-box;
45 | }
46 |
47 | .modal__close {
48 | background: transparent;
49 | border: 0;
50 | }
51 |
52 | .modal__header .modal__close:before { content: "\2715"; }
53 |
54 | .modal__content {
55 | margin-top: 2rem;
56 | margin-bottom: 2rem;
57 | line-height: 1.5;
58 | color: rgba(0,0,0,.8);
59 | }
60 |
61 | .modal__btn {
62 | font-size: .875rem;
63 | padding-left: 1rem;
64 | padding-right: 1rem;
65 | padding-top: .5rem;
66 | padding-bottom: .5rem;
67 | background-color: #e6e6e6;
68 | color: rgba(0,0,0,.8);
69 | border-radius: .25rem;
70 | border-style: none;
71 | border-width: 0;
72 | cursor: pointer;
73 | -webkit-appearance: button;
74 | text-transform: none;
75 | overflow: visible;
76 | line-height: 1.15;
77 | margin: 0;
78 | will-change: transform;
79 | -moz-osx-font-smoothing: grayscale;
80 | -webkit-backface-visibility: hidden;
81 | backface-visibility: hidden;
82 | -webkit-transform: translateZ(0);
83 | transform: translateZ(0);
84 | transition: -webkit-transform .25s ease-out;
85 | transition: transform .25s ease-out;
86 | transition: transform .25s ease-out,-webkit-transform .25s ease-out;
87 | }
88 |
89 | .modal__btn:focus, .modal__btn:hover {
90 | -webkit-transform: scale(1.05);
91 | transform: scale(1.05);
92 | }
93 |
94 | .modal__btn-primary {
95 | background-color: #00449e;
96 | color: #fff;
97 | }
98 |
99 |
100 |
101 | /**************************\
102 | Demo Animation Style
103 | \**************************/
104 | @keyframes mmfadeIn {
105 | from { opacity: 0; }
106 | to { opacity: 1; }
107 | }
108 |
109 | @keyframes mmfadeOut {
110 | from { opacity: 1; }
111 | to { opacity: 0; }
112 | }
113 |
114 | @keyframes mmslideIn {
115 | from { transform: translateY(15%); }
116 | to { transform: translateY(0); }
117 | }
118 |
119 | @keyframes mmslideOut {
120 | from { transform: translateY(0); }
121 | to { transform: translateY(-10%); }
122 | }
123 |
124 | .micromodal-slide {
125 | display: none;
126 | }
127 |
128 | .micromodal-slide.is-open {
129 | display: block;
130 | }
131 |
132 | .micromodal-slide[aria-hidden="false"] .modal__overlay {
133 | animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
134 | }
135 |
136 | .micromodal-slide[aria-hidden="false"] .modal__container {
137 | animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
138 | }
139 |
140 | .micromodal-slide[aria-hidden="true"] .modal__overlay {
141 | animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
142 | }
143 |
144 | .micromodal-slide[aria-hidden="true"] .modal__container {
145 | animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
146 | }
147 |
148 | .micromodal-slide .modal__container,
149 | .micromodal-slide .modal__overlay {
150 | will-change: transform;
151 | }
--------------------------------------------------------------------------------
/resources/js/Components/ApplicationLogo.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/resources/js/Components/Button.vue:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/resources/js/Components/Chart.vue:
--------------------------------------------------------------------------------
1 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/resources/js/Components/Checkbox.vue:
--------------------------------------------------------------------------------
1 |
26 |
27 |
28 |
30 |
31 |
--------------------------------------------------------------------------------
/resources/js/Components/Dropdown.vue:
--------------------------------------------------------------------------------
1 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
60 |
69 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/resources/js/Components/DropdownLink.vue:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/resources/js/Components/FlashMessage.vue:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
7 | {{ $page.props.flash.message }}
8 |
9 |
11 | {{ $page.props.flash.message }}
12 |
13 |
--------------------------------------------------------------------------------
/resources/js/Components/Input.vue:
--------------------------------------------------------------------------------
1 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/resources/js/Components/InputError.vue:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 | {{ message }}
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/resources/js/Components/Label.vue:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 | {{ value }}
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/resources/js/Components/MicroModal.vue:
--------------------------------------------------------------------------------
1 |
40 |
41 |
42 |
43 |
44 |
50 |
51 |
52 |
53 |
54 |
55 | Id
56 | 氏名
57 | カナ
58 | 電話番号
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 | {{ customer.id }}
67 |
68 |
69 | {{ customer.name }}
70 | {{ customer.kana }}
71 | {{ customer.tel }}
72 |
73 |
74 |
75 |
76 |
77 |
80 |
81 |
82 |
83 |
84 | 検索する
85 |
--------------------------------------------------------------------------------
/resources/js/Components/NavLink.vue:
--------------------------------------------------------------------------------
1 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/resources/js/Components/Pagination.vue:
--------------------------------------------------------------------------------
1 |
5 |
6 |
17 |
--------------------------------------------------------------------------------
/resources/js/Components/ResponsiveNavLink.vue:
--------------------------------------------------------------------------------
1 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/resources/js/Components/ValidationErrors.vue:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
問題が発生しました。
13 |
14 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/resources/js/Layouts/Guest.vue:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/resources/js/Pages/Auth/ConfirmPassword.vue:
--------------------------------------------------------------------------------
1 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | This is a secure area of the application. Please confirm your password before continuing.
26 |
27 |
28 |
29 |
30 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/resources/js/Pages/Auth/ForgotPassword.vue:
--------------------------------------------------------------------------------
1 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.
28 |
29 |
30 |
31 | {{ status }}
32 |
33 |
34 |
35 |
36 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/resources/js/Pages/Auth/Login.vue:
--------------------------------------------------------------------------------
1 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | {{ status }}
36 |
37 |
38 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/resources/js/Pages/Auth/Register.vue:
--------------------------------------------------------------------------------
1 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/resources/js/Pages/Auth/ResetPassword.vue:
--------------------------------------------------------------------------------
1 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/resources/js/Pages/Auth/VerifyEmail.vue:
--------------------------------------------------------------------------------
1 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn't receive the email, we will gladly send you another.
26 |
27 |
28 |
29 | A new verification link has been sent to the email address you provided during registration.
30 |
31 |
32 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/resources/js/Pages/ComponentTest.vue:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 | タイトル
13 |
17 |
18 |
--------------------------------------------------------------------------------
/resources/js/Pages/Customers/Index.vue:
--------------------------------------------------------------------------------
1 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | 顧客一覧
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 | 検索
44 |
45 |
顧客登録
46 |
47 |
48 |
49 |
50 |
51 | Id
52 | 氏名
53 | カナ
54 | 電話番号
55 |
56 |
57 |
58 |
59 |
60 |
61 | {{ customer.id }}
62 |
63 | {{ customer.name }}
64 | {{ customer.kana }}
65 | {{ customer.tel }}
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/resources/js/Pages/Customers/Index_test.vue:
--------------------------------------------------------------------------------
1 |
18 |
19 |
20 |
21 | {{ customer.id }}
22 | {{ customer.name }}
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/resources/js/Pages/Dashboard.vue:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | Dashboard
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | You're logged in!
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/resources/js/Pages/Inertia/Create.vue:
--------------------------------------------------------------------------------
1 |
19 |
20 |
21 |
28 |
--------------------------------------------------------------------------------
/resources/js/Pages/Inertia/Index.vue:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 | {{ $page.props.flash.message }}
11 |
12 |
13 |
14 | 件名: {{ blog.title }},
15 | 本文: {{ blog.content}}
16 |
17 |
18 | ああああ
19 |
20 |
--------------------------------------------------------------------------------
/resources/js/Pages/Inertia/Show.vue:
--------------------------------------------------------------------------------
1 |
18 |
19 |
20 | {{ id }}
21 | {{ blog.title }}
22 | 削除
23 |
--------------------------------------------------------------------------------
/resources/js/Pages/InertiaTest.vue:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 | Inertiaテストです。
11 | aタグ経由です
12 | Link経由です
13 | 名前付きルートの確認です
14 | ルートパラメータのテストです
15 |
16 |
17 | {{ newTitle }}
18 | {{ newContent }}
19 | DB保存テスト
24 |
--------------------------------------------------------------------------------
/resources/js/Pages/Items/Create.vue:
--------------------------------------------------------------------------------
1 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | 商品登録
28 |
29 |
30 |
31 |
75 |
76 |
77 |
--------------------------------------------------------------------------------
/resources/js/Pages/Items/Index.vue:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | 商品一覧
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | 商品登録
31 |
32 |
33 |
34 |
35 |
36 | Id
37 | 商品名
38 | 価格
39 | ステータス
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | {{ item.id }}
48 |
49 |
50 | {{ item.name }}
51 | {{ item.price }}
52 |
53 | 販売中
54 | 停止中
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/resources/js/Pages/Purchases/Create_bak.vue:
--------------------------------------------------------------------------------
1 |
55 |
56 |
57 |
58 | 日付
59 |
60 |
61 | 会員名
62 |
63 |
64 | {{ customer.id }} : {{ customer.name }}
65 |
66 |
67 |
68 |
69 | 商品・サービス
70 |
71 |
72 |
73 | Id
74 | 商品名
75 | 金額
76 | 数量
77 | 小計
78 |
79 |
80 |
81 |
82 | {{ item.id }}
83 | {{ item.name }}
84 | {{ item.price }}
85 |
86 |
87 | {{ q }}
88 |
89 |
90 |
91 | {{ item.price * item.quantity }}
92 |
93 |
94 |
95 |
96 |
97 | 合計: {{ totalPrice }} 円
98 | 登録する
99 |
100 |
--------------------------------------------------------------------------------
/resources/js/Pages/Purchases/Index.vue:
--------------------------------------------------------------------------------
1 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | 購買履歴
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 | 検索
41 |
42 |
43 |
44 |
45 |
46 |
47 | Id
48 | 氏名
49 | 合計金額
50 | ステータス
51 | 購入日
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 | {{ order.id }}
60 |
61 |
62 | {{ order.customer_name }}
63 | {{ order.total }}
64 | {{ order.status }}
65 | {{ dayjs(order.created_at).format('YYYY-MM-DD HH:mm:ss') }}
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/resources/js/app.js:
--------------------------------------------------------------------------------
1 | import './bootstrap';
2 | import './micromodal';
3 | import '../css/app.css';
4 | import '../css/micromodal.css';
5 |
6 | import { createApp, h } from 'vue';
7 | import { createInertiaApp } from '@inertiajs/inertia-vue3';
8 | import { InertiaProgress } from '@inertiajs/progress';
9 | import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers';
10 | import { ZiggyVue } from '../../vendor/tightenco/ziggy/dist/vue.m';
11 |
12 | const appName = window.document.getElementsByTagName('title')[0]?.innerText || 'Laravel';
13 |
14 | createInertiaApp({
15 | title: (title) => `${title} - ${appName}`,
16 | resolve: (name) => resolvePageComponent(`./Pages/${name}.vue`, import.meta.glob('./Pages/**/*.vue')),
17 | setup({ el, app, props, plugin }) {
18 | return createApp({ render: () => h(app, props) })
19 | .use(plugin)
20 | .use(ZiggyVue, Ziggy)
21 | .mount(el);
22 | },
23 | });
24 |
25 | InertiaProgress.init({ color: '#4B5563' });
26 |
--------------------------------------------------------------------------------
/resources/js/bootstrap.js:
--------------------------------------------------------------------------------
1 | import _ from 'lodash';
2 | window._ = _;
3 |
4 | /**
5 | * We'll load the axios HTTP library which allows us to easily issue requests
6 | * to our Laravel back-end. This library automatically handles sending the
7 | * CSRF token as a header based on the value of the "XSRF" token cookie.
8 | */
9 |
10 | import axios from 'axios';
11 | window.axios = axios;
12 |
13 | window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
14 |
15 | /**
16 | * Echo exposes an expressive API for subscribing to channels and listening
17 | * for events that are broadcast by Laravel. Echo and event broadcasting
18 | * allows your team to easily build robust real-time web applications.
19 | */
20 |
21 | // import Echo from 'laravel-echo';
22 |
23 | // import Pusher from 'pusher-js';
24 | // window.Pusher = Pusher;
25 |
26 | // window.Echo = new Echo({
27 | // broadcaster: 'pusher',
28 | // key: import.meta.env.VITE_PUSHER_APP_KEY,
29 | // wsHost: import.meta.env.VITE_PUSHER_HOST ?? `ws-${import.meta.env.VITE_PUSHER_APP_CLUSTER}.pusher.com`,
30 | // wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80,
31 | // wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443,
32 | // forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https',
33 | // enabledTransports: ['ws', 'wss'],
34 | // });
35 |
--------------------------------------------------------------------------------
/resources/js/common.js:
--------------------------------------------------------------------------------
1 | const nl2br = (str) => {
2 | var res = str.replace(/\r\n/g, " ");
3 | res = res.replace(/(\n|\r)/g, " ");
4 | return res;
5 | }
6 |
7 | const getToday = () => {
8 | const today = new Date();
9 | const yyyy = today.getFullYear();
10 | const mm = ("0"+(today.getMonth()+1)).slice(-2);
11 | const dd = ("0"+today.getDate()).slice(-2);
12 | return yyyy+'-'+mm+'-'+dd;
13 | }
14 |
15 | export { nl2br, getToday }
--------------------------------------------------------------------------------
/resources/js/micromodal.js:
--------------------------------------------------------------------------------
1 | import MicroModal from 'micromodal'; // es6 module
2 | MicroModal.init({
3 | disableScroll: true
4 | });
5 |
6 |
--------------------------------------------------------------------------------
/resources/views/app.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | {{ config('app.name', 'Laravel') }}
8 |
9 |
10 |
11 |
12 |
13 | @routes
14 | @vite('resources/js/app.js')
15 | @inertiaHead
16 |
17 |
18 | @inertia
19 |
20 |
21 |
--------------------------------------------------------------------------------
/routes/api.php:
--------------------------------------------------------------------------------
1 | get('/analysis', [ AnalysisController::class, 'index' ])
21 | ->name('api.analysis');
22 |
23 | Route::middleware('auth:sanctum')
24 | ->get('/searchCustomers', function (Request $request) {
25 | return Customer::searchCustomers($request->search)
26 | ->select('id', 'name', 'kana', 'tel')->paginate(50);
27 | });
28 |
29 | Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
30 | return $request->user();
31 | });
32 |
--------------------------------------------------------------------------------
/routes/auth.php:
--------------------------------------------------------------------------------
1 | group(function () {
14 | Route::get('register', [RegisteredUserController::class, 'create'])
15 | ->name('register');
16 |
17 | Route::post('register', [RegisteredUserController::class, 'store']);
18 |
19 | Route::get('login', [AuthenticatedSessionController::class, 'create'])
20 | ->name('login');
21 |
22 | Route::post('login', [AuthenticatedSessionController::class, 'store']);
23 |
24 | Route::get('forgot-password', [PasswordResetLinkController::class, 'create'])
25 | ->name('password.request');
26 |
27 | Route::post('forgot-password', [PasswordResetLinkController::class, 'store'])
28 | ->name('password.email');
29 |
30 | Route::get('reset-password/{token}', [NewPasswordController::class, 'create'])
31 | ->name('password.reset');
32 |
33 | Route::post('reset-password', [NewPasswordController::class, 'store'])
34 | ->name('password.update');
35 | });
36 |
37 | Route::middleware('auth')->group(function () {
38 | Route::get('verify-email', [EmailVerificationPromptController::class, '__invoke'])
39 | ->name('verification.notice');
40 |
41 | Route::get('verify-email/{id}/{hash}', [VerifyEmailController::class, '__invoke'])
42 | ->middleware(['signed', 'throttle:6,1'])
43 | ->name('verification.verify');
44 |
45 | Route::post('email/verification-notification', [EmailVerificationNotificationController::class, 'store'])
46 | ->middleware('throttle:6,1')
47 | ->name('verification.send');
48 |
49 | Route::get('confirm-password', [ConfirmablePasswordController::class, 'show'])
50 | ->name('password.confirm');
51 |
52 | Route::post('confirm-password', [ConfirmablePasswordController::class, 'store']);
53 |
54 | Route::post('logout', [AuthenticatedSessionController::class, 'destroy'])
55 | ->name('logout');
56 | });
57 |
--------------------------------------------------------------------------------
/routes/channels.php:
--------------------------------------------------------------------------------
1 | id === (int) $id;
18 | });
19 |
--------------------------------------------------------------------------------
/routes/console.php:
--------------------------------------------------------------------------------
1 | comment(Inspiring::quote());
19 | })->purpose('Display an inspiring quote');
20 |
--------------------------------------------------------------------------------
/routes/web.php:
--------------------------------------------------------------------------------
1 | name('analysis');
13 |
14 | Route::resource('items', ItemController::class)
15 | ->middleware(['auth', 'verified']);
16 |
17 | Route::resource('customers', CustomerController::class)
18 | ->middleware(['auth', 'verified']);
19 |
20 | Route::resource('purchases', PurchaseController::class)
21 | ->middleware(['auth', 'verified']);
22 |
23 |
24 | Route::get('/inertia-test', function () {
25 | return Inertia::render('InertiaTest');
26 | }
27 | );
28 |
29 | Route::get('/component-test', function () {
30 | return Inertia::render('ComponentTest');
31 | }
32 | );
33 |
34 |
35 | Route::get('/inertia/index', [InertiaTestController::class, 'index'])->name('inertia.index');
36 | Route::get('/inertia/create', [InertiaTestController::class, 'create'])->name('inertia.create');
37 | Route::post('/inertia', [InertiaTestController::class, 'store'])->name('inertia.store');
38 | Route::get('/inertia/show/{id}', [InertiaTestController::class, 'show'])->name('inertia.show');
39 | Route::delete('/inertia/{id}', [InertiaTestController::class, 'delete'])->name('inertia.delete');
40 |
41 |
42 |
43 | Route::get('/', function () {
44 | return Inertia::render('Welcome', [
45 | 'canLogin' => Route::has('login'),
46 | 'canRegister' => Route::has('register'),
47 | 'laravelVersion' => Application::VERSION,
48 | 'phpVersion' => PHP_VERSION,
49 | ]);
50 | });
51 |
52 | Route::get('/dashboard', function () {
53 | return Inertia::render('Dashboard');
54 | })->middleware(['auth', 'verified'])->name('dashboard');
55 |
56 | require __DIR__.'/auth.php';
57 |
--------------------------------------------------------------------------------
/storage/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/aokitashipro/laravel_uCRM/0ff5a9087ead6c6c7b6d938c0634e84fe0355602/storage/.DS_Store
--------------------------------------------------------------------------------
/storage/app/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !public/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/storage/app/public/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/debugbar/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/.gitignore:
--------------------------------------------------------------------------------
1 | compiled.php
2 | config.php
3 | down
4 | events.scanned.php
5 | maintenance.php
6 | routes.php
7 | routes.scanned.php
8 | schedule-*
9 | services.json
10 |
--------------------------------------------------------------------------------
/storage/framework/cache/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !data/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/storage/framework/cache/data/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/sessions/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/testing/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/views/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/logs/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | const defaultTheme = require('tailwindcss/defaultTheme');
2 |
3 | /** @type {import('tailwindcss').Config} */
4 | module.exports = {
5 | content: [
6 | './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php',
7 | './storage/framework/views/*.php',
8 | './resources/views/**/*.blade.php',
9 | './resources/js/**/*.vue',
10 | ],
11 |
12 | theme: {
13 | extend: {
14 | fontFamily: {
15 | sans: ['Nunito', ...defaultTheme.fontFamily.sans],
16 | },
17 | },
18 | },
19 |
20 | plugins: [require('@tailwindcss/forms')],
21 | };
22 |
--------------------------------------------------------------------------------
/tests/CreatesApplication.php:
--------------------------------------------------------------------------------
1 | make(Kernel::class)->bootstrap();
19 |
20 | return $app;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/tests/Feature/Auth/AuthenticationTest.php:
--------------------------------------------------------------------------------
1 | get('/login');
17 |
18 | $response->assertStatus(200);
19 | }
20 |
21 | public function test_users_can_authenticate_using_the_login_screen()
22 | {
23 | $user = User::factory()->create();
24 |
25 | $response = $this->post('/login', [
26 | 'email' => $user->email,
27 | 'password' => 'password',
28 | ]);
29 |
30 | $this->assertAuthenticated();
31 | $response->assertRedirect(RouteServiceProvider::HOME);
32 | }
33 |
34 | public function test_users_can_not_authenticate_with_invalid_password()
35 | {
36 | $user = User::factory()->create();
37 |
38 | $this->post('/login', [
39 | 'email' => $user->email,
40 | 'password' => 'wrong-password',
41 | ]);
42 |
43 | $this->assertGuest();
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/tests/Feature/Auth/EmailVerificationTest.php:
--------------------------------------------------------------------------------
1 | create([
20 | 'email_verified_at' => null,
21 | ]);
22 |
23 | $response = $this->actingAs($user)->get('/verify-email');
24 |
25 | $response->assertStatus(200);
26 | }
27 |
28 | public function test_email_can_be_verified()
29 | {
30 | $user = User::factory()->create([
31 | 'email_verified_at' => null,
32 | ]);
33 |
34 | Event::fake();
35 |
36 | $verificationUrl = URL::temporarySignedRoute(
37 | 'verification.verify',
38 | now()->addMinutes(60),
39 | ['id' => $user->id, 'hash' => sha1($user->email)]
40 | );
41 |
42 | $response = $this->actingAs($user)->get($verificationUrl);
43 |
44 | Event::assertDispatched(Verified::class);
45 | $this->assertTrue($user->fresh()->hasVerifiedEmail());
46 | $response->assertRedirect(RouteServiceProvider::HOME.'?verified=1');
47 | }
48 |
49 | public function test_email_is_not_verified_with_invalid_hash()
50 | {
51 | $user = User::factory()->create([
52 | 'email_verified_at' => null,
53 | ]);
54 |
55 | $verificationUrl = URL::temporarySignedRoute(
56 | 'verification.verify',
57 | now()->addMinutes(60),
58 | ['id' => $user->id, 'hash' => sha1('wrong-email')]
59 | );
60 |
61 | $this->actingAs($user)->get($verificationUrl);
62 |
63 | $this->assertFalse($user->fresh()->hasVerifiedEmail());
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/tests/Feature/Auth/PasswordConfirmationTest.php:
--------------------------------------------------------------------------------
1 | create();
16 |
17 | $response = $this->actingAs($user)->get('/confirm-password');
18 |
19 | $response->assertStatus(200);
20 | }
21 |
22 | public function test_password_can_be_confirmed()
23 | {
24 | $user = User::factory()->create();
25 |
26 | $response = $this->actingAs($user)->post('/confirm-password', [
27 | 'password' => 'password',
28 | ]);
29 |
30 | $response->assertRedirect();
31 | $response->assertSessionHasNoErrors();
32 | }
33 |
34 | public function test_password_is_not_confirmed_with_invalid_password()
35 | {
36 | $user = User::factory()->create();
37 |
38 | $response = $this->actingAs($user)->post('/confirm-password', [
39 | 'password' => 'wrong-password',
40 | ]);
41 |
42 | $response->assertSessionHasErrors();
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/tests/Feature/Auth/PasswordResetTest.php:
--------------------------------------------------------------------------------
1 | get('/forgot-password');
18 |
19 | $response->assertStatus(200);
20 | }
21 |
22 | public function test_reset_password_link_can_be_requested()
23 | {
24 | Notification::fake();
25 |
26 | $user = User::factory()->create();
27 |
28 | $this->post('/forgot-password', ['email' => $user->email]);
29 |
30 | Notification::assertSentTo($user, ResetPassword::class);
31 | }
32 |
33 | public function test_reset_password_screen_can_be_rendered()
34 | {
35 | Notification::fake();
36 |
37 | $user = User::factory()->create();
38 |
39 | $this->post('/forgot-password', ['email' => $user->email]);
40 |
41 | Notification::assertSentTo($user, ResetPassword::class, function ($notification) {
42 | $response = $this->get('/reset-password/'.$notification->token);
43 |
44 | $response->assertStatus(200);
45 |
46 | return true;
47 | });
48 | }
49 |
50 | public function test_password_can_be_reset_with_valid_token()
51 | {
52 | Notification::fake();
53 |
54 | $user = User::factory()->create();
55 |
56 | $this->post('/forgot-password', ['email' => $user->email]);
57 |
58 | Notification::assertSentTo($user, ResetPassword::class, function ($notification) use ($user) {
59 | $response = $this->post('/reset-password', [
60 | 'token' => $notification->token,
61 | 'email' => $user->email,
62 | 'password' => 'password',
63 | 'password_confirmation' => 'password',
64 | ]);
65 |
66 | $response->assertSessionHasNoErrors();
67 |
68 | return true;
69 | });
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/tests/Feature/Auth/RegistrationTest.php:
--------------------------------------------------------------------------------
1 | get('/register');
16 |
17 | $response->assertStatus(200);
18 | }
19 |
20 | public function test_new_users_can_register()
21 | {
22 | $response = $this->post('/register', [
23 | 'name' => 'Test User',
24 | 'email' => 'test@example.com',
25 | 'password' => 'password',
26 | 'password_confirmation' => 'password',
27 | ]);
28 |
29 | $this->assertAuthenticated();
30 | $response->assertRedirect(RouteServiceProvider::HOME);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/tests/Feature/ExampleTest.php:
--------------------------------------------------------------------------------
1 | get('/');
18 |
19 | $response->assertStatus(200);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/tests/TestCase.php:
--------------------------------------------------------------------------------
1 | assertTrue(true);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite';
2 | import laravel from 'laravel-vite-plugin';
3 | import vue from '@vitejs/plugin-vue';
4 |
5 | export default defineConfig({
6 | plugins: [
7 | laravel({
8 | input: 'resources/js/app.js',
9 | refresh: true,
10 | }),
11 | vue({
12 | template: {
13 | transformAssetUrls: {
14 | base: null,
15 | includeAbsolute: false,
16 | },
17 | },
18 | }),
19 | ],
20 | });
21 |
--------------------------------------------------------------------------------