Compare commits

30 Commits

Author SHA1 Message Date
6977325bb1 改用yarn:調整package.json檔案中scripts區段內包含npm run的字串改為yarn 2018-08-20 02:04:57 +08:00
1a565fd788 首頁建置與部份顯示模組拆開 2018-08-15 06:59:52 +08:00
67969b005f 從yarn改回npm,並將前端部署用的檔案從git分離
Laravel預設仍是使用npm,若不使用npm的情況下,會造成在跑 `yarn run dev`
的時候,中間有環節會呼叫npm時會出錯。
另外在使用 `npm run dev`
時發現會覆蓋掉有被git算上的前端部屬用的檔案,故修改.gitignore將這些檔案脫離。
2018-08-15 05:46:19 +08:00
62ce1f2068 Merge branch 'feature/auth' into develop 2018-08-15 04:52:50 +08:00
f682741758 edit password_resets tables 2018-08-15 04:51:56 +08:00
9fd6e08400 修改config/auth.php: 忘記密碼的資料表 2018-08-15 00:36:28 +08:00
a130550274 Merge branch 'develop' 2018-08-15 00:27:48 +08:00
7d48d74cb1 fix migration file error: Schema::table->Schema::create 2018-08-11 16:30:43 +08:00
e8b92eb473 重新命名表格名稱:password_resets->password_resets_for_receiver; 新增兩個資料庫遷移檔password_resets_for_admin和password_resets_for_casebuilder 2018-08-11 14:03:00 +08:00
21f7367b7e fix config/auth.php (忘記密碼功能尚未處理) 2018-08-07 23:14:32 +08:00
36fecb5d9e Merge branch 'develop' into feature/auth 2018-08-07 23:11:35 +08:00
a52429930e Router: 將登入模組移出來
留下可在路由群組加上中介層的彈性,若不移出來的話,會在登入時卡在中介層不通過導致無法進入登入畫面。
2018-08-07 23:08:16 +08:00
9216e2f157 (尚未改完) 修改config/auth.php 2018-08-07 19:19:43 +08:00
ddde0e25d1 add migration file for password_resets table 2018-08-07 19:03:57 +08:00
4b9b4f1880 訂定三種角色的登入架構 2018-08-07 18:27:50 +08:00
4bbed319f2 Route方面: 將原本Auth::routes();的簡寫手動拆出來
因為我們的專案在登入架構上有多出角色+ID綁雙主鍵的架構,在Route方面也需要連同一起改造
2018-08-06 23:58:28 +08:00
2a9054c9d8 fix Index route in routes\web.php 2018-08-05 18:16:01 +08:00
b317a26500 Merge branch 'develop' of ssh://git.yuaner.tw:10022/kol/BlogMatch into develop 2018-08-05 18:09:10 +08:00
c6521b2a7a Merge branch 修改架構的分支 2018-08-05 18:03:24 +08:00
984e851e97 修改Controller與View的頁面與Router架構 2018-08-05 18:03:00 +08:00
342384599f add migration file for receiver and casebulder table in DB 2018-08-05 14:31:01 +08:00
b7621addd3 Create Laravel Auth 2018-08-05 14:23:03 +08:00
15325f103c add migration file for receiver, casebuilder and admin table in DB 2018-08-05 14:12:07 +08:00
14a3b1571d 修改Controller架構 2018-08-05 13:22:28 +08:00
5da2c5a92e 修改2018_07_29_083103_create_admin_table.php 將admin改成Admin 2018-08-05 13:00:00 +08:00
167427381f Merge branch 'feature/LoginAuthentication' into develop 2018-08-05 12:41:15 +08:00
4ca70a0562 完成接案者的登出功能 2018-08-01 20:03:17 +08:00
7e9bbe282a 完成接案者登入功能 2018-07-31 19:24:54 +08:00
552154f629 接案者的登入身份驗證尚未完成,目前只有登入畫面能run而已 2018-07-30 20:19:12 +08:00
0d51e9db6b 完成登入畫面製作、路由調整及新增receiver控制器 2018-07-29 17:25:36 +08:00
44 changed files with 1485 additions and 59735 deletions

3
.gitignore vendored
View File

@@ -1,6 +1,9 @@
/node_modules
/public/hot
/public/storage
/public/js
/public/css
/public/fonts
/storage/*.key
/vendor
/.idea

42
app/Admin.php Normal file
View File

@@ -0,0 +1,42 @@
<?php
/**
* Created by Reliese Model.
* Date: Sun, 29 Jul 2018 08:54:26 +0000.
*/
namespace App;
use Illuminate\Database\Eloquent\Model as Eloquent;
/**
* Class Admin
*
* @property string $ID
* @property string $password
* @property string $name
* @property string $nick_name
* @property string $phone_number
* @property \Carbon\Carbon $created_at
* @property \Carbon\Carbon $updated_at
*
* @package App
*/
class Admin extends Eloquent
{
protected $connection = 'mysql';
protected $table = 'admin';
protected $primaryKey = 'ID';
public $incrementing = false;
protected $hidden = [
'password'
];
protected $fillable = [
'password',
'name',
'nick_name',
'phone_number'
];
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Exceptions;
use Exception;
class UserNotFoundException extends Exception
{
//
}

View File

@@ -18,7 +18,9 @@ class LoginController extends Controller
|
*/
use AuthenticatesUsers;
use AuthenticatesUsers{
showLoginForm as traitShowLoginForm;
}
/**
* Where to redirect users after login.
@@ -36,4 +38,47 @@ class LoginController extends Controller
{
$this->middleware('guest')->except('logout');
}
/**
* Show the application's login form.
*
* @return \Illuminate\Http\Response
*/
public function showLoginForm()
{
// return view('auth.login');
// return $this->traitShowLoginForm();
return view('auth.login');
}
/**
* 顯示接案者的登入表單
*
* @return \Illuminate\Http\Response
*/
public function showReceiverLoginForm()
{
return $this->showLoginForm();
}
/**
* 顯示發案者的登入表單
*
* @return \Illuminate\Http\Response
*/
public function showCaseBuilderLoginForm()
{
return $this->showLoginForm();
}
/**
* 顯示網站管理者的登入表單
*
* @return \Illuminate\Http\Response
*/
public function showAdminLoginForm()
{
return $this->showLoginForm();
}
}

View File

@@ -0,0 +1,14 @@
<?php
namespace App\Http\Controllers\CaseBuilder;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class CaseBuilderController extends Controller
{
public function index(Request $request)
{
return view('casebuilder.index');
}
}

View File

@@ -0,0 +1,29 @@
<?php
namespace App\Http\Controllers\Home;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
// $this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('home.index');
}
}

View File

@@ -1,13 +0,0 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
public function index()
{
return view('home.index');
}
}

View File

@@ -0,0 +1,79 @@
<?php
namespace App\Http\Controllers\Receiver;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Validator;
use App\Receiver;
class ReceiverController extends Controller
{
public function index(Request $request)
{
return view('receiver.index');
}
public function manager(Request $request)
{
// code...
}
public function about(Request $request)
{
// code...
}
// *************************************************************************
public function loginProcess()
{
$input = request()->all();
//輸入資料驗證
$rules = [
'email'=>[
'required',
'email',
],
'password'=>[
'required',
'min:6'
],
];
$validate = Validator::make($input,$rules);
if($validate->fails()){
return redirect('/receiver/login')
->withErrors($validate)->withInput();
}
//驗證通過,巷資料庫查詢使用者是否存在
$User = Receiver::where('email',$input['email'])->firstOrFail();
$isPasswordCorrect = $input['password'] == $User->password;
if(!$isPasswordCorrect){
//failed -> 導向至登入畫面(附帶錯誤訊息)
$error_msg = [
'msg'=>['密碼錯誤']
];
return redirect('/receiver/login')->withErrors($error_msg)
->withInput();
}
//Pass->紀錄session
/* $record = [
'user_id'=>$User->RID,
'role_id'=>'Receiver'
]; */
//session()->put($record);
// $binds = [
// 'name'=>$User->nickname
// ];
// $name = $User->nickname;
session()->put('user_id',$User->RID);
return redirect('/');
}
public function logout()
{
session()->forget('user_id');
return redirect('/');
}
}

View File

@@ -3,6 +3,7 @@
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
class AppServiceProvider extends ServiceProvider
{
@@ -13,7 +14,7 @@ class AppServiceProvider extends ServiceProvider
*/
public function boot()
{
//
Schema::defaultStringLength(191);
}
/**

View File

@@ -14,8 +14,8 @@ return [
*/
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
'guard' => 'receivers-web',
'passwords' => 'receivers',
],
/*
@@ -36,15 +36,42 @@ return [
*/
'guards' => [
'web' => [
// 'web' => [
// 'driver' => 'session',
// 'provider' => 'users',
// ],
// 'api' => [
// 'driver' => 'token',
// 'provider' => 'users',
// ],
'receivers-web' => [
'driver' => 'session',
'provider' => 'users',
'provider' => 'receivers',
],
'receivers-api' => [
'driver' => 'token',
'provider' => 'receivers',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'caseBuilders-web' => [
'driver' => 'session',
'provider' => 'caseBuilders',
],
'caseBuilders-api' => [
'driver' => 'token',
'provider' => 'caseBuilders',
],
'admins-web' => [
'driver' => 'session',
'provider' => 'admins',
],
// 'admins-api' => [
// 'driver' => 'token',
// 'provider' => 'admins',
// ],
],
/*
@@ -65,9 +92,21 @@ return [
*/
'providers' => [
'users' => [
// 'users' => [
// 'driver' => 'eloquent',
// 'model' => App\User::class,
// ],
'receivers' => [
'driver' => 'eloquent',
'model' => App\User::class,
'model' => App\Receiver::class,
],
'caseBuilders' => [
'driver' => 'eloquent',
'model' => App\CaseBuilder::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
],
// 'users' => [
@@ -92,11 +131,21 @@ return [
*/
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
// 'users' => [
// 'provider' => 'users',
// 'table' => 'password_resets',
// 'expire' => 60,
// ],
'receivers' => [
'provider' => 'receivers',
'table' => 'password_resets_for_receiver',
'expire' => 60,
],
'caseBuilders' => [
'provider' => 'caseBuilders',
'table' => 'password_resets_for_casebuilder',
'expire' => 60,
]
],
];

View File

@@ -0,0 +1,36 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateAdminTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('Admin', function (Blueprint $table) {
$table->string('ID');
$table->string('password');
$table->string('name');
$table->string('nick_name');
$table->string('phone_number');
$table->primary('ID');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('admin');
}
}

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddRememberTokenForReceiver extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('Receiver', function (Blueprint $table) {
$table->rememberToken();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('Receiver', function (Blueprint $table) {
$table->dropRememberToken();
});
}
}

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddRememberTokenForCasebuilder extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('CaseBuilder', function (Blueprint $table) {
$table->rememberToken();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('CaseBuilder', function (Blueprint $table) {
$table->dropRememberToken();
});
}
}

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddRememberTokenForAdmin extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('Admin', function (Blueprint $table) {
$table->rememberToken();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('Admin', function (Blueprint $table) {
$table->dropRememberToken();
});
}
}

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddTimestampForReceiver extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('Receiver', function (Blueprint $table) {
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('Receiver', function (Blueprint $table) {
$table->dropTimestamps();
});
}
}

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddTimestampForCasebuilder extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('CaseBuilder', function (Blueprint $table) {
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('CaseBuilder', function (Blueprint $table) {
$table->dropTimestamps();
});
}
}

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePasswordResetsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('password_resets', function (Blueprint $table) {
$table->string('email')->index();
$table->string('token');
$table->timestamp('created_at')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('password_resets');
}
}

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class RenameResetPasswordTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('password_resets', function (Blueprint $table) {
$table->rename('password_resets_for_receiver');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('password_resets_for_receiver', function (Blueprint $table) {
$table->rename('password_resets');
});
}
}

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePasswordResetsForCasebuilderTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('password_resets_for_casebuilder', function (Blueprint $table) {
$table->string('email')->index();
$table->string('token');
$table->timestamp('created_at')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('password_resets_for_casebuilder');
}
}

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePasswordResetsForAdminTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('password_resets_for_admin', function (Blueprint $table) {
$table->string('email')->index();
$table->string('token');
$table->timestamp('created_at')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('password_resets_for_admin');
}
}

View File

@@ -0,0 +1,38 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class ModifiyPasswordResetsForReceiverColumn extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('Receiver', function (Blueprint $table) {
$table->unique('email');
});
Schema::table('password_resets_for_receiver', function (Blueprint $table) {
$table->foreign('email', 'fk_password_resets_for_receiver_1')->references('email')->on('Receiver')->onUpdate('NO ACTION')->onDelete('CASCADE');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('password_resets_for_receiver', function (Blueprint $table) {
$table->dropForeign('fk_password_resets_for_receiver_1');
});
Schema::table('Receiver', function (Blueprint $table) {
$table->dropUnique('email');
});
}
}

View File

@@ -0,0 +1,38 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class ModifiyPasswordResetsForCasebuilderColumn extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('CaseBuilder', function (Blueprint $table) {
$table->unique('contactEmail');
});
Schema::table('password_resets_for_casebuilder', function (Blueprint $table) {
$table->foreign('email', 'fk_password_resets_for_casebuilder_1')->references('contactEmail')->on('CaseBuilder')->onUpdate('NO ACTION')->onDelete('CASCADE');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('password_resets_for_casebuilder', function (Blueprint $table) {
$table->dropForeign('fk_password_resets_for_casebuilder_1');
});
Schema::table('CaseBuilder', function (Blueprint $table) {
$table->dropUnique('contactEmail');
});
}
}

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class DropPasswordResetsForAdminTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::dropIfExists('password_resets_for_admin');
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::create('password_resets_for_admin', function (Blueprint $table) {
$table->string('email')->index();
$table->string('token');
$table->timestamp('created_at')->nullable();
});
}
}

View File

@@ -11,6 +11,6 @@ class DatabaseSeeder extends Seeder
*/
public function run()
{
// $this->call(UsersTableSeeder::class);
}
}

View File

@@ -1,22 +1,24 @@
{
"private": true,
"scripts": {
"dev": "npm run development",
"dev": "yarn development",
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "npm run development -- --watch",
"watch-poll": "npm run watch -- --watch-poll",
"watch": "yarn development -- --watch",
"watch-poll": "yarn watch -- --watch-poll",
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"prod": "npm run production",
"prod": "yarn production",
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
},
"devDependencies": {
"axios": "^0.18",
"bootstrap": "^4.0.0",
"cross-env": "^5.1",
"font-awesome": "^4.7.0",
"jquery": "^3.2",
"laravel-mix": "^2.0",
"lodash": "^4.17.4",
"popper.js": "^1.12",
"vue": "^2.5.7"
}
},
"dependencies": {}
}

10479
public/css/app.css vendored

File diff suppressed because it is too large Load Diff

47404
public/js/app.js vendored

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
{
"/js/app.js": "/js/app.js",
"/css/app.css": "/css/app.css"
}
}

View File

@@ -5,9 +5,7 @@
sudo apt install php mysql-server phpmyadmin php-mbstring php-xml php-zip curl wget libpng-dev
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
sudo cat /etc/mysql/debian.cnf #查詢系統內定的MySQL預設帳號密碼
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update && apt install nodejs yarn
sudo apt update && apt install nodejs npm
## 專案參數與環境重建
當你Clone下來的專案因為有git採用了 `.gitignore` 機制比較敏感的參數像是APP_KEY、資料庫帳密等與共用的函式庫檔案不會包含進來必須在自己這邊重建。
@@ -22,7 +20,7 @@
$ composer install
### 3. 安裝前端相關函式庫
$ yarn install
$ npm install
### 4. 設定 .env 檔
`.env.example` 複製成 `.env`
@@ -35,9 +33,13 @@
這個專案有包含資料庫遷移(Migration),所以只要下:
$ php artisan migrate
就可以了,資料表都會自動產生
### 7. 重建前端部屬用檔案
$ npm run dev
## 執行此專案
### 快速啟動
$ php artisan serve

View File

@@ -7,6 +7,8 @@
// Bootstrap
@import '~bootstrap/scss/bootstrap';
@import '~font-awesome/scss/font-awesome';
$fa-font-path: "/fonts" !default;
.navbar-laravel {
background-color: #fff;

View File

@@ -0,0 +1,71 @@
@extends('layouts.app')
@section('content')
<div class="container py-4">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Login') }}</div>
<div class="card-body">
<form method="POST" action="{{ route('login') }}" aria-label="{{ __('Login') }}">
@csrf
<div class="form-group row">
<label for="email" class="col-sm-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control{{ $errors->has('email') ? ' is-invalid' : '' }}" name="email" value="{{ old('email') }}" required autofocus>
@if ($errors->has('email'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('email') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control{{ $errors->has('password') ? ' is-invalid' : '' }}" name="password" required>
@if ($errors->has('password'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('password') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group row">
<div class="col-md-6 offset-md-4">
<div class="form-check">
<input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>
<label class="form-check-label" for="remember">
{{ __('Remember Me') }}
</label>
</div>
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-8 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Login') }}
</button>
<a class="btn btn-link" href="{{ route('password.request') }}">
{{ __('Forgot Your Password?') }}
</a>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@@ -0,0 +1,47 @@
@extends('layouts.app')
@section('content')
<div class="container py-4">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Reset Password') }}</div>
<div class="card-body">
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
<form method="POST" action="{{ route('password.email') }}" aria-label="{{ __('Reset Password') }}">
@csrf
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control{{ $errors->has('email') ? ' is-invalid' : '' }}" name="email" value="{{ old('email') }}" required>
@if ($errors->has('email'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('email') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-6 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Send Password Reset Link') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@@ -0,0 +1,65 @@
@extends('layouts.app')
@section('content')
<div class="container py-4">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Reset Password') }}</div>
<div class="card-body">
<form method="POST" action="{{ route('password.request') }}" aria-label="{{ __('Reset Password') }}">
@csrf
<input type="hidden" name="token" value="{{ $token }}">
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control{{ $errors->has('email') ? ' is-invalid' : '' }}" name="email" value="{{ $email ?? old('email') }}" required autofocus>
@if ($errors->has('email'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('email') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control{{ $errors->has('password') ? ' is-invalid' : '' }}" name="password" required>
@if ($errors->has('password'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('password') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group row">
<label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>
<div class="col-md-6">
<input id="password-confirm" type="password" class="form-control" name="password_confirmation" required>
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-6 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Reset Password') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@@ -0,0 +1,77 @@
@extends('layouts.app')
@section('content')
<div class="container py-4">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Register') }}</div>
<div class="card-body">
<form method="POST" action="{{ route('register') }}" aria-label="{{ __('Register') }}">
@csrf
<div class="form-group row">
<label for="name" class="col-md-4 col-form-label text-md-right">{{ __('Name') }}</label>
<div class="col-md-6">
<input id="name" type="text" class="form-control{{ $errors->has('name') ? ' is-invalid' : '' }}" name="name" value="{{ old('name') }}" required autofocus>
@if ($errors->has('name'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('name') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control{{ $errors->has('email') ? ' is-invalid' : '' }}" name="email" value="{{ old('email') }}" required>
@if ($errors->has('email'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('email') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control{{ $errors->has('password') ? ' is-invalid' : '' }}" name="password" required>
@if ($errors->has('password'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('password') }}</strong>
</span>
@endif
</div>
</div>
<div class="form-group row">
<label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>
<div class="col-md-6">
<input id="password-confirm" type="password" class="form-control" name="password_confirmation" required>
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-6 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Register') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@@ -0,0 +1,25 @@
@extends('layouts.app')
@section('title','KOL管理')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">Dashboard</div>
<div class="card-body">
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
You are logged in!
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@@ -1,6 +1,62 @@
@extends('layout.app')
@extends('layouts.app')
@section('title', config('app.name', 'Laravel'))
@section('content')
<button class="btn btn-primary">我想成為KOL</button>
<button class="btn btn-primary">我想成為品牌/代理商</button>
@endsection
<main role="main">
<section class="jumbotron text-center">
<div class="container">
<h1 class="jumbotron-heading">不只幫您找好KOL</h1>
<p class="lead text-muted">讓您輕鬆管理預算、掌握專案流程</p>
<h1 class="jumbotron-heading">不只幫您找好廠商</h1>
<p class="lead text-muted">讓您與廠商溝通無障礙、完美結案</p>
<form>
<div class="form-group">
<input class="form-control" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success" type="submit">Search</button>
</div>
</form>
<!-- <p>
<a href="#" class="btn btn-primary my-2">Main call to action</a>
<a href="#" class="btn btn-secondary my-2">Secondary action</a>
</p> -->
</div>
</section>
<section>
<div class="container">
<div class="row">
<div class="col-sm-3">
<h2>我是廠商</h2>
<ul>
<li>KOL搜尋</li>
<li>我的最愛KOL</li>
<li>發案管理</li>
<li>合作廠商</li>
<li>結案管理</li>
</ul>
<button class="btn btn-primary">我想成為KOL</button>
</div>
<div class="col-sm-3">
<h2>我是KOL</h2>
<ul>
<li>案件通知</li>
<li>合作廠商</li>
<li>執行管理</li>
<li>發布管理</li>
<li>結案管理</li>
</ul>
<button class="btn btn-primary">我想成為品牌/代理商</button>
</div>
<div class="col-sm">
<h2>公告區</h2>
<ul>
<li></li>
</ul>
</div>
</div>
</div>
</section>
</main>
@endsection

View File

@@ -1,38 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>部落客媒合系統</title>
<link rel="stylesheet" href="/css/app.css">
</head>
<body>
<div class="container">
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">部落客媒合系統</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ml-auto">
<li class="nav-item active">
<a class="nav-link" href="#">KOL登入<span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">品牌/代理商登入</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">後台登入</a>
</li>
</ul>
</div>
</nav>
<div class="mt-3">
@yield('content')
</div>
</div>
<script src="/js/app.js"></script>
</body>
</html>

View File

@@ -0,0 +1,57 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>@yield('title')</title>
<!-- Scripts -->
<script src="{{ asset('js/app.js') }}" defer></script>
<!-- Fonts -->
<link rel="dns-prefetch" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet" type="text/css">
<!-- Styles -->
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
</head>
<body>
<div id="app">
<nav class="navbar navbar-expand-md navbar-light navbar-laravel">
<div class="container">
<a class="navbar-brand" href="{{ url('/') }}">
{{ config('app.name', 'BlogMatch') }}
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<!-- Left Side Of Navbar -->
<ul class="navbar-nav mr-auto">
</ul>
<!-- Right Side Of Navbar -->
<ul class="navbar-nav ml-auto">
@include('layouts.partials.auth-navbar-item')
</ul>
</div>
</div>
</nav>
<main>
@yield('content')
</main>
<footer>
@include('layouts.partials.footer')
</footer>
</div>
</body>
</html>

View File

@@ -0,0 +1,39 @@
<!-- Authentication Links -->
@guest
<li class="nav-item">
<a class="nav-link" href="{{ route('login') }}">登入</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ route('register') }}">註冊</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ route('register') }}">捷徑</a>
</li>
<!-- <li class="nav-item">
<a class="nav-link" href="/receiver/login">KOL登入<span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">品牌/代理商登入</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">後台登入</a>
</li> -->
@else
<li class="nav-item dropdown">
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
{{ Auth::user()->name }} <span class="caret"></span>
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{{ route('logout') }}"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
{{ __('Logout') }}
</a>
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
@csrf
</form>
</div>
</li>
@endguest

View File

@@ -0,0 +1,30 @@
<hr>
<div class="container">
<div class="row">
<div class="col-sm-2">
<h2>關於我們</h2>
<ul>
<li>關於</li>
<li>行銷知識</li>
<li>合作提案</li>
<li>聯絡我們</li>
</ul>
</div>
<div class="col-sm-2">
<h2>服務條款</h2>
<ul>
<li>隱私政策</li>
<li>網站條款</li>
<li>常見問題</li>
</ul>
</div>
<div class="col-sm-2">
<h2>服務聯盟</h2>
<ul>
<li>開箱王</li>
<li>BVG</li>
<li>凱曜網路</li>
</ul>
</div>
</div>
</div>

View File

@@ -0,0 +1,25 @@
@extends('layouts.app')
@section('title','KOL管理')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">Dashboard</div>
<div class="card-body">
@if (session('status'))
<div class="alert alert-success" role="alert">
{{ session('status') }}
</div>
@endif
You are logged in!
</div>
</div>
</div>
</div>
</div>
@endsection

View File

@@ -11,32 +11,53 @@
|
*/
/* Route::get('/', function () {
return view('welcome');
}); */
// Route::get('/', function () {
// return view('welcome');
// });
//首頁url
Route::get('/', 'HomeController@index');
// 首頁url
Route::get('/', 'Home\HomeController@index')->name('home');
// //管理者相關url
// Route::group(['prefix' => 'admin'], function () {
// Route::get('/login', '');
// Route::post('/login', '');
// Route::get('/dashbord', '');
// });
//
// //接案者相關url
// Route::group(['prefix' => 'receiver'], function () {
// Route::get('/login', '');
// Route::post('/login', '');
// Route::get('/register', '');
// Route::post('/register', '');
// });
//
// //發案者相關url
// Route::group(['prefix' => 'casebuilder'], function () {
// Route::get('/login', '');
// Route::post('/login', '');
// Route::get('/register', '');
// Route::post('/register', '');
// });
// 登入相關的
// Authentication Routes...
Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::get('/receiver/login', 'Auth\LoginController@showReceiverLoginForm')->name('receiver.login');
Route::get('/casebuilder/login', 'Auth\LoginController@showCaseBuilderLoginForm')->name('casebuilder.login');
Route::get('/admin/login', 'Auth\LoginController@showAdminLoginForm')->name('admin.login');
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout')->name('logout');
// Registration Routes...
Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
Route::post('register', 'Auth\RegisterController@register');
// Password Reset Routes...
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset');
// 接案者相關url
Route::group(['prefix' => 'receiver'], function () {
Route::get('/', 'Receiver\ReceiverController@index');
// Route::get('/login', 'Receiver\ReceiverController@loginPage');
// Route::post('/login', 'Receiver\ReceiverController@loginProcess');
// Route::get('/logout','Receiver\ReceiverController@logout');
// Route::get('/register', '');
// Route::post('/register', '');
});
//發案者相關url
Route::group(['prefix' => 'casebuilder'], function () {
Route::get('/', 'CaseBuilder\CaseBuilderController@index');
// Route::get('/login', '');
// Route::post('/login', '');
// Route::get('/register', '');
// Route::post('/register', '');
});
// 管理者相關url
Route::group(['prefix' => 'admin'], function () {
// Route::get('/dashbord', '');
});

4
webpack.mix.js vendored
View File

@@ -12,4 +12,6 @@ let mix = require('laravel-mix');
*/
mix.js('resources/assets/js/app.js', 'public/js')
.sass('resources/assets/sass/app.scss', 'public/css');
.sass('resources/assets/sass/app.scss', 'public/css')
.copy('node_modules/font-awesome/fonts', 'public/fonts')
.sourceMaps();

1945
yarn.lock

File diff suppressed because it is too large Load Diff