From e4bd32f901eead439af3be3469d91a898c9207e9 Mon Sep 17 00:00:00 2001 From: whoisnian Date: Sat, 13 May 2017 16:56:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E4=BA=86good=5Finfo=E8=A1=A8?= =?UTF-8?q?,good=5Ftags=E8=A1=A8=EF=BC=8C=E4=BB=A5=E5=8F=8A=E7=9B=B8?= =?UTF-8?q?=E5=BA=94controller?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 5 + app/GoodTag.php | 10 + app/Http/Controllers/AdminController.php | 4 +- app/Http/Controllers/ContentController.php | 6 +- app/Http/Controllers/GoodController.php | 190 +++++++++++------- app/Http/Requests/AddGoodRequest.php | 24 +-- app/Http/routes.php | 29 +-- ...16_03_23_061239_create_good_info_table.php | 12 +- ...17_05_08_223153_create_good_tags_table.php | 33 +++ database/seeds/UserSeeder.php | 9 + resources/views/good/addPage.blade.php | 22 +- resources/views/good/editPage.blade.php | 26 +-- resources/views/good/goodInfo.blade.php | 16 +- resources/views/good/goodList.blade.php | 9 +- resources/views/good/myGood.blade.php | 6 +- resources/views/user/editFavlist.blade.php | 8 +- resources/views/user/favlist.blade.php | 6 +- tests/GoodTest.php | 65 ++++++ 18 files changed, 314 insertions(+), 166 deletions(-) create mode 100644 app/GoodTag.php create mode 100644 database/migrations/2017_05_08_223153_create_good_tags_table.php create mode 100644 tests/GoodTest.php diff --git a/.env.example b/.env.example index 86aab15..2e1a250 100644 --- a/.env.example +++ b/.env.example @@ -9,6 +9,11 @@ DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret +DB_TEST_HOST=127.0.0.1 +DB_TEST_DATABASE=homestead +DB_TEST_USERNAME=homestead +DB_TEST_PASSWORD=secret + CACHE_DRIVER=file SESSION_DRIVER=file QUEUE_DRIVER=sync diff --git a/app/GoodTag.php b/app/GoodTag.php new file mode 100644 index 0000000..8b58919 --- /dev/null +++ b/app/GoodTag.php @@ -0,0 +1,10 @@ +orderby('id', 'asc')->get(); + $data['goods'] = GoodInfo::where('baned', '1')->orderby('id', 'asc')->get(); $data['users'] = User::orderby('id', 'asc')->get(); $data['cats'] = GoodCat::orderby('cat_name', 'asc')->get(); return View::make('admin.index')->with($data); @@ -37,7 +37,7 @@ class AdminController extends Controller public function checkGood(Request $request, $good_id) { $good = GoodInfo::find($good_id); - $good->checked = 1; + $good->baned = 0; $good->update(); return Redirect::to('/admin'); } diff --git a/app/Http/Controllers/ContentController.php b/app/Http/Controllers/ContentController.php index befe0da..70f10d4 100644 --- a/app/Http/Controllers/ContentController.php +++ b/app/Http/Controllers/ContentController.php @@ -16,11 +16,11 @@ class ContentController extends Controller public function Mainpage() { $data = []; - $data['stargoods'] = GoodInfo::where('checked', '1')->where('stared', '1')->orderby('id', 'asc')->limit(5)->get(); - $data['newgoods'] = GoodInfo::where('checked', '1')->orderby('id', 'dsc')->limit(8)->get(); + $data['stargoods'] = GoodInfo::where('baned', '0')->where('stared', '1')->orderby('id', 'asc')->limit(5)->get(); + $data['newgoods'] = GoodInfo::where('baned', '0')->orderby('id', 'dsc')->limit(8)->get(); $data['cats'] = GoodCat::orderby('cat_index', 'asc')->get(); foreach($data['cats'] as $cat){ - $data['catgoods'][$cat->cat_name] = GoodInfo::where('cat_id', $cat->id)->where('checked', '1')->inRandomOrder()->limit(4)->get(); + $data['catgoods'][$cat->cat_name] = GoodInfo::where('cat_id', $cat->id)->where('baned', '0')->inRandomOrder()->limit(4)->get(); } $data['announces'] = Announcement::orderby('id', 'dsc')->limit(3)->get(); return View::make('welcome')->with($data); diff --git a/app/Http/Controllers/GoodController.php b/app/Http/Controllers/GoodController.php index 8d672de..48bbf3f 100644 --- a/app/Http/Controllers/GoodController.php +++ b/app/Http/Controllers/GoodController.php @@ -11,9 +11,11 @@ use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Response; use App\GoodCat; use App\GoodInfo; +use App\GoodTag; use App\Transaction; use App\TransactionLog; use App\Messages; +use App\Tag; use App\FavList; use App\Http\Controllers\Controller; use Storage; @@ -41,7 +43,7 @@ class GoodController extends Controller $data['goods'] = GoodInfo::where('cat_id', $input['cat_id']); $data['cat_id'] = $input['cat_id']; } - $data['goods'] = $data['goods']->orderby('id', 'asc')->where('checked', 1)->paginate(16); + $data['goods'] = $data['goods']->orderby('id', 'asc')->where('baned', 0)->paginate(16); if($request->session()->has('user_id')) $data['user_id'] = $request->session()->get('user_id'); else @@ -111,7 +113,7 @@ class GoodController extends Controller { $good->status=5; $goodinfo = GoodInfo::find($good->good_id); - $goodinfo->counts = $goodinfo->counts-$good->number; + $goodinfo->count = $goodinfo->count-$good->number; $goodinfo->save(); } $good->save(); @@ -122,14 +124,14 @@ class GoodController extends Controller { $input = $request->all(); $data = GoodInfo::find($good_id); - if($input['counts']<=0||$input['counts']>$data->counts) + if($input['count']<=0||$input['count']>$data->count) return Redirect::to('/good/'.$good_id)->withErrors('购买数量不符合规范'); $buy = new Transaction; $buy->good_id = $good_id; $buy->buyer_id = $request->session()->get('user_id'); $buy->seller_id = $data->user_id; $buy->status = 1; - $buy->number = $input['counts']; + $buy->number = $input['count']; $buy->save(); $buyername = User::find($data->user_id); $goodname = GoodInfo::where('id',$good_id)->first(); @@ -155,43 +157,63 @@ class GoodController extends Controller * @return Redirect * @description Add a new good. */ + public function showAddGood(AddGoodRequest $request) + { + $data = []; + if(!$request->session()->has('user_id')) + return Redirect::back(); + $data['cats'] = GoodCat::orderby('cat_index', 'asc')->get(); + //$data['tags'] = Tag::orderby('id', 'asc')->get(); + return view::make('good.addPage')->with($data); + } + public function addGood(AddGoodRequest $request) { - if($request->method() == "GET"){ - $data = []; - if(!$request->session()->has('user_id')) - return Redirect::back(); - $data['cats'] = GoodCat::orderby('cat_index', 'asc')->get(); - return view::make('good.addPage')->with($data); - }else{ - if(!$request->session()->has('user_id')) - return Redirect::back(); - $this->validate($request, [ - 'good_name' => 'required', - 'description' => 'required', - 'pricemin' => 'required', - 'pricemax' => 'required', - 'counts' => 'required', - ]); - $input = $request->all(); - $good = new GoodInfo; - $good->good_name = $input['good_name']; - $good->cat_id = $input['cat_id']; - $good->description = $input['description']; - $good->pricemin = $input['pricemin']; - $good->pricemax = $input['pricemax']; - $good->type = $input['type']; - $good->counts = $input['counts']; - $good->good_tag = $input['good_tag']; - $good->user_id = $request->session()->get('user_id'); - $good->checked = '1'; - $good->save(); - Storage::put( - 'good/titlepic/'.sha1($good->id), - Image::make($request->file('goodTitlePic'))->crop(round($input['crop_width']),round($input['crop_height']),round($input['crop_x']),round($input['crop_y']))->resize(800, 450)->encode('data-url') - ); - return Redirect::to('/good/'.$good->id); - } + if(!$request->session()->has('user_id')) + return Redirect::back(); + $this->validate($request, [ + 'good_name' => 'required', + 'description' => 'required', + 'price' => 'required', + 'count' => 'required', + //'good_tag' => 'required', + ]); + $input = $request->all(); + $good = new GoodInfo; + $good->good_name = $input['good_name']; + $good->cat_id = $input['cat_id']; + $good->description = $input['description']; + $good->price = $input['price']; + $good->type = $input['type']; + $good->count = $input['count']; + $good->user_id = $request->session()->get('user_id'); + $good->baned = '0'; + $good->save(); + + /*$good_tags = $input['good_tag']; + foreach($good_tags as $tag_id) + { + $tag = new GoodTag; + if(!$tag_id) + { + $otherTag = new Tag; + $otherTag->tag_name = $input['other_tag']; + $otherTag->save(); + $tag->tag_id = $otherTag->id; + } + else if($tag_id) + { + $tag->tag_id = $tag_id; + } + $tag->good_id = $good->id; + $tag->save(); + }*/ + + Storage::put( + 'good/titlepic/'.sha1($good->id), + Image::make($request->file('goodTitlePic'))->crop(round($input['crop_width']),round($input['crop_height']),round($input['crop_x']),round($input['crop_y']))->resize(800, 450)->encode('data-url') + ); + return Redirect::to('/good/'.$good->id); } /** @@ -200,40 +222,64 @@ class GoodController extends Controller * @return Redirect * @description Edit a specify good. */ + public function showEditGood(Request $request, $good_id) + { + $data = []; + $data['cats'] = GoodCat::orderby('cat_index', 'asc')->get(); + $data['goods'] = GoodInfo::where('id', $good_id)->get(); + /*$data['tags'] = Tag::orderby('id', 'asc')->get(); + $collection = GoodTag::where('good_id', $good_id)->pluck('tag_id'); + $data['this_good_tags'] = $collection->toArray();*/ + return view::make('good.editPage')->with($data); + } + public function editGood(Request $request, $good_id) { - if($request->method() == "GET"){ - $data = []; - $data['cats'] = GoodCat::orderby('cat_index', 'asc')->get(); - $data['goods'] = GoodInfo::where('id', $good_id)->get(); - return view::make('good.editPage')->with($data); - }else{ - if(!$request->session()->has('user_id')) - return Redirect::back(); - $this->validate($request, [ - 'good_name' => 'required', - 'cat_id' => 'required', - 'description' => 'required', - 'pricemin' => 'required', - 'pricemax' => 'required', - 'type' => 'required', - 'counts' => 'required', - ]); - $input = $request->all(); - $good = GoodInfo::find($good_id); - if($request->session()->get('user_id')!=$good->user_id && !$request->session()->has('is_admin')) - return Redirect::back(); - $good->good_name=$input['good_name']; - $good->cat_id=$input['cat_id']; - $good->description=$input['description']; - $good->pricemin=$input['pricemin']; - $good->pricemax=$input['pricemax']; - $good->type=$input['type']; - $good->counts=$input['counts']; - $good->good_tag=$input['good_tag']; - $good->update(); - return Redirect::to('/good/'.$good_id); - } + if(!$request->session()->has('user_id')) + return Redirect::back(); + $this->validate($request, [ + 'good_name' => 'required', + 'cat_id' => 'required', + 'description' => 'required', + 'price' => 'required', + 'type' => 'required', + 'count' => 'required', + //'good_tag' => 'required', + ]); + $input = $request->all(); + $good = GoodInfo::find($good_id); + if($request->session()->get('user_id')!=$good->user_id && !$request->session()->has('is_admin')) + return Redirect::back(); + $good->good_name=$input['good_name']; + $good->cat_id=$input['cat_id']; + $good->description=$input['description']; + $good->price=$input['price']; + $good->type=$input['type']; + $good->count=$input['count']; + $good->update(); + + $deleteoldtags = GoodTag::where('good_id', $good_id)->delete(); + + /*$good_tags = $input['good_tag']; + foreach($good_tags as $tag_id) + { + $tag = new GoodTag; + if(!$tag_id) + { + $otherTag = new Tag; + $otherTag->tag_name = $input['other_tag']; + $otherTag->save(); + $tag->tag_id = $otherTag->id; + } + else if($tag_id) + { + $tag->tag_id = $tag_id; + } + $tag->good_id = $good->id; + $tag->save(); + }*/ + + return Redirect::to('/good/'.$good_id); } /** @@ -250,6 +296,8 @@ class GoodController extends Controller if($request->session()->get('user_id') != $good->user_id) return Redirect::back(); $good->delete(); + //$deleteGoodTag = GoodTag::where('good_id', $good_id)->delete(); + $deleteFavList = Favlist::where('good_id', $good_id)->delete(); return Redirect::to('/good'); } diff --git a/app/Http/Requests/AddGoodRequest.php b/app/Http/Requests/AddGoodRequest.php index e2f56a6..fc0fbef 100644 --- a/app/Http/Requests/AddGoodRequest.php +++ b/app/Http/Requests/AddGoodRequest.php @@ -26,11 +26,11 @@ class addGoodRequest extends Request if($this->method()=='GET') return []; return [ 'good_name'=>'required|between:3,128', - 'description'=>'max:2048', - 'pricemin'=>'required|max:2147483647', - 'pricemax'=>'required|max:2147483647', - 'counts'=>'required|max:2147483647', - 'good_tag'=>'max:128', + 'description'=>'required|max:2048', + 'price'=>'required|max:9223372036854775807', + 'count'=>'required|max:2147483647', + //'good_tag'=>'required', + //'other_tag'=>'max:128', 'goodTitlePic'=>'required', ]; } @@ -39,14 +39,14 @@ class addGoodRequest extends Request return [ 'good_name.required' => '商品名不能为空!', 'good_name.between' => '商品名必须为3=128个字符!', + 'description.required' => '商品描述不能为空!', 'description.max' => '商品描述不能多于2048个字符!', - 'pricemin.required' => '最低价格不能为空!', - 'pricemin.max' => '最低价格不能超过2147483647!', - 'pricemax.required' => '最高价格不能为空!', - 'pricemax.max' => '最高价格不能超过2147483647!', - 'counts.required' => '库存数不能为空!', - 'counts.max' => '库存数不能超过2147483647!', - 'good_tag.max'=>'TAG不能多于128个字符!', + 'price.required' => '商品价格不能为空!', + 'price.max' => '商品价格不能超过9223372036854775807!', + 'count.required' => '库存数不能为空!', + 'count.max' => '库存数不能超过2147483647!', + //'good_tag.required' => '商品标签不能为空!', + //'other_tag.max' => '自定义标签不能多于2048个字符!', 'goodTitlePic.required' => '必须为商品上传一张图片!', ]; } diff --git a/app/Http/routes.php b/app/Http/routes.php index 8023df2..b7fb59b 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -100,19 +100,16 @@ Route::group(['middleware' => ['web']],function () { "uses" => "ContentController@announcementPage", ]); - Route::get('/good', [ - "uses" => "GoodController@getList", - ]); + Route::get('/good', "GoodController@getList"); + Route::get('/good/my', "GoodController@myGood")->middleware('auth'); - Route::match(['post', 'get'], '/good/add', [ - "uses" => "GoodController@addGood", - "middleware" => "auth" - ]); + Route::get('/good/add', "GoodController@showAddGood")->middleware('auth'); + Route::post('/good/add', "GoodController@addGood")->middleware('auth'); - Route::match(['post', 'get'], '/good/my', [ - "uses" => "GoodController@myGood", - "middleware" => "auth" - ]); + Route::get('/good/{good_id}/edit', "GoodController@showEditGood")->middleware('auth'); + Route::post('/good/{good_id}/edit', "GoodController@editGood")->middleware('auth'); + + Route::delete('/good/{good_id}/delete', "GoodController@deleteGood")->middleware('auth'); Route::match(['post', 'get'], '/good/check', [ "uses" => "GoodController@check", @@ -123,16 +120,6 @@ Route::group(['middleware' => ['web']],function () { "uses" => "GoodController@end", "middleware" => "auth" ]); - - Route::match(['post', 'get'], '/good/{good_id}/edit', [ - "uses" => "GoodController@editGood", - "middleware" => "auth" - ]); - - Route::delete('/good/{good_id}/delete', [ - "uses" => "GoodController@deleteGood", - "middleware" => "auth" - ]); Route::post('/good/{good_id}/buy', [ "uses" => "GoodController@getGood", diff --git a/database/migrations/2016_03_23_061239_create_good_info_table.php b/database/migrations/2016_03_23_061239_create_good_info_table.php index b9389eb..3c14093 100644 --- a/database/migrations/2016_03_23_061239_create_good_info_table.php +++ b/database/migrations/2016_03_23_061239_create_good_info_table.php @@ -17,14 +17,12 @@ class CreateGoodInfoTable extends Migration $table->string('good_name'); $table->integer('cat_id'); $table->text('description'); - $table->integer('pricemin'); - $table->integer('pricemax'); - $table->integer('type'); + $table->bigInteger('price'); + $table->tinyInteger('type'); $table->integer('user_id'); - $table->integer('counts'); - $table->text('good_tag'); - $table->integer('checked'); - $table->integer('stared'); + $table->integer('count'); + $table->boolean('baned'); + $table->boolean('stared'); $table->timestamps(); }); } diff --git a/database/migrations/2017_05_08_223153_create_good_tags_table.php b/database/migrations/2017_05_08_223153_create_good_tags_table.php new file mode 100644 index 0000000..675735a --- /dev/null +++ b/database/migrations/2017_05_08_223153_create_good_tags_table.php @@ -0,0 +1,33 @@ +increments('id'); + $table->integer('good_id'); + $table->integer('tag_id'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('good_tags'); + } +} diff --git a/database/seeds/UserSeeder.php b/database/seeds/UserSeeder.php index 6603f0d..b34eca7 100644 --- a/database/seeds/UserSeeder.php +++ b/database/seeds/UserSeeder.php @@ -21,5 +21,14 @@ class UserSeeder extends Seeder 'stuid' => '00000000', 'havecheckedemail' => 1 ]); + DB::table('users')->insert([ + 'privilege' => 0, + 'username' => 'test', + 'password' => Hash::make('test'), + 'nickname' => 'test', + 'email' => 'test@test', + 'stuid' => '00000001', + 'havecheckedemail' => 1 + ]); } } diff --git a/resources/views/good/addPage.blade.php b/resources/views/good/addPage.blade.php index 119f938..ace17b8 100644 --- a/resources/views/good/addPage.blade.php +++ b/resources/views/good/addPage.blade.php @@ -50,18 +50,10 @@
- +
- -
-
-
-
- -
-
- +
@@ -80,17 +72,23 @@
- +
+ {{--
- + @foreach($tags as $tag) + + @endforeach +
+ --}}
diff --git a/resources/views/good/editPage.blade.php b/resources/views/good/editPage.blade.php index 478b176..f4d1839 100644 --- a/resources/views/good/editPage.blade.php +++ b/resources/views/good/editPage.blade.php @@ -53,18 +53,10 @@
- +
- -
-
-
-
- -
-
- +
@@ -83,17 +75,27 @@
- +
+ {{--
- + @foreach($tags as $tag) + @if(in_array($tag->id, $this_good_tags)) + + @else + + @endif + @endforeach +
+ --}} {{--
diff --git a/resources/views/good/goodInfo.blade.php b/resources/views/good/goodInfo.blade.php index 50008a0..7766c1c 100644 --- a/resources/views/good/goodInfo.blade.php +++ b/resources/views/good/goodInfo.blade.php @@ -27,13 +27,13 @@

{{ $good->good_name }}

-

¥{{ $good->pricemin }} - ¥{{ $good->pricemax }}

+

¥{{ $good->price }}

@if(($good->user_id) != Session::get('user_id'))
- + {!! csrf_field() !!}
@@ -51,8 +51,8 @@ {!! csrf_field() !!} {!! method_field('DELETE') !!} - - @endif + + @endif
@@ -65,21 +65,21 @@
- @if(isset($inFvlst)) + @if(isset($inFvlst))
{!! csrf_field() !!} @if(count($inFvlst) == 0) + value="收藏OvO"/> @endif @if(count($inFvlst) != 0) + value="取消收藏QAQ"/> @endif
@else + value="收藏OvO"/> @endif
diff --git a/resources/views/good/goodList.blade.php b/resources/views/good/goodList.blade.php index adae56a..bd3e37f 100644 --- a/resources/views/good/goodList.blade.php +++ b/resources/views/good/goodList.blade.php @@ -26,12 +26,11 @@
{{ $good->good_name }}
-
¥{{ $good->pricemin }} - - ¥{{ $good->pricemax }}
- @if($good->counts==0) +
¥{{ $good->price }}
+ @if($good->count==0)
无库存QAQ
@else -
库存:{{ $good->counts }}
+
库存:{{ $good->count }}
@endif
@@ -45,6 +44,6 @@
- + @endsection diff --git a/resources/views/good/myGood.blade.php b/resources/views/good/myGood.blade.php index f9473f8..e25575c 100644 --- a/resources/views/good/myGood.blade.php +++ b/resources/views/good/myGood.blade.php @@ -25,8 +25,7 @@ # 商品名称 - 最低价格 - 最高价格 + 商品价格 修改信息 删除商品 @@ -34,8 +33,7 @@ {{ $good->id }} {{ $good->good_name }} - {{ $good->pricemin }} - {{ $good->pricemax }} + {{ $good->price }}
diff --git a/resources/views/user/editFavlist.blade.php b/resources/views/user/editFavlist.blade.php index 3e75016..90e3bd1 100644 --- a/resources/views/user/editFavlist.blade.php +++ b/resources/views/user/editFavlist.blade.php @@ -14,22 +14,20 @@ # 商品名称 - 最低价格 - 最高价格 + 商品价格 选择 @foreach($goods as $good) {{ $good->good_id }} {{ $good_info[$good->good_id]->good_name }} - {{ $good_info[$good->good_id]->pricemin }} - {{ $good_info[$good->good_id]->pricemax }} + {{ $good_info[$good->good_id]->price }} @endforeach - +