diff --git a/app/Admin/Controllers/v3/GoodsNewController.php b/app/Admin/Controllers/v3/GoodsNewController.php new file mode 100644 index 0000000..5b4b975 --- /dev/null +++ b/app/Admin/Controllers/v3/GoodsNewController.php @@ -0,0 +1,226 @@ +id->sortable(); + $grid->cover_img_url->image('',50); + $grid->name; + $grid->price; + $grid->column('market_id')->display(function($marketId){ + $item = MarketModel::getMarketInfo($marketId,'name'); + return empty($item) ? '' : $item->name; + }); + $grid->store_id->display(function ($storeId){ + $store = StoreModel::getStoreInfo($storeId,'name'); + return empty($store) ? '' : $store->name; + }); + $grid->category_id->display(function ($categoryId){ + $item = CategoryModel::getInfo($categoryId,'title'); + return empty($item) ? '' : $item->title; + }); + $grid->goods_category_id->display(function ($goodsCategoryId){ + $item = GoodsCategoryModel::getInfo($goodsCategoryId,'title'); + return empty($item) ? '' : $item->title; + }); + + + $grid->sort->sortable(); + $grid->on_sale->switch(); + + $grid->actions([new GoodsCopy()]); + $grid->filter(function (Grid\Filter $filter) { + $filter->like('name'); + }); + + $grid->model()->orderBy('id', 'desc'); + // 每页10条 + $grid->paginate(10); + }); + } + + /** + * Make a show builder. + * + * @param mixed $id + * + * @return Show + */ + protected function detail($id) + { + // $g = GoodsModel::find(1572); + // dd($g->toArray()); + return Show::make($id, new GoodsNew(), function (Show $show) { + $show->row(function (Show\Row $show) { + $show->width(6)->field('id'); + $show->width(6)->field('name'); + $show->width(6)->category_id->as(function ($categoryId){ + $item = CategoryModel::getInfo($categoryId,'title'); + return empty($item) ? '' : $item->title; + }); + $show->width(6)->store_id->as(function ($storeId){ + $item = GoodsCategoryModel::getInfo($storeId,'name'); + return empty($item) ? '' : $item->name; + }); + $show->width(6)->store_id->as(function ($goodsCategoryId){ + $item = StoreModel::getStoreInfo($goodsCategoryId,'name'); + return empty($item) ? '' : $item->name; + }); + $show->width(6)->cover_img->image(); + $show->width(6)->price; + $show->width(6)->original_price; + $show->width(6)->vip_price; + $show->width(6)->inventory; + $show->width(6)->goods_unit; + + }); + $show->row(function (Show\Row $show) { + $show->width(6)->on_sale_text; + $show->width(6)->content; + $show->width(6)->sort; + $show->width(6)->restrict_num; + $show->width(6)->start_num; + $show->width(6)->is_infinite_text; + + $show->width(6)->tags->as(function ($value){ + return $value; + }); + $show->width(6)->spec->as(function ($value){ + $text = ''; + foreach ($value as $v){ + $text .= '【'.$v['spec_key'] .':'.$v['spec_value'].'】 '; + } + return $text; + }); + $goodsModel = new GoodsModel(); + $show->html(function () use($goodsModel){ + if(empty($this->details_imgs)){ + return ''; + }else{ + // 还需要优化 + $value = $this->details_imgs; + $text = ''; + foreach ($value as $v){ + $img = $goodsModel->imageUrl($v); + $text .= ""; + } + return $text; + } + }); + + // $show->created_at; + // $show->updated_at; + }); + }); + } + + /** + * Make a form builder. + * + * @return Form + */ + protected function form() + { + $builder = GoodsModel::with(['ImageBanners','VideoBanners']); + + return Form::make($builder, function (Form $form) { + $form->hidden('id'); + + // 二级分类 + $categoryList = CategoryModel::getArray([['parent_id','>',0]]); + // 商品类目 + $goodsCategoryList = GoodsCategoryModel::getArray(); + // 店铺 + $storeList = StoreModel::getStoreArray(); + //市场 + // $marketList = MarketModel::getMarketArray(); + + $form->column(6, function (Form $form) use($storeList,$categoryList,$goodsCategoryList ){ + // $form->select('market_id')->required()->options($marketList); + $form->select('category_id')->required()->options($categoryList)->load('goods_category_id', '/api/goods_category_list'); + $form->select('goods_category_id')->required(); + $form->select('store_id')->required()->options($storeList); + $form->text('name')->required()->maxLength(20); + $form->image('cover_img')->required(); + $form->number('sort'); + }); + $form->column(6, function (Form $form) { + $form->currency('price')->required()->floatTwo()->symbol('¥'); + $form->currency('original_price')->required()->floatTwo()->symbol('¥'); + $form->currency('vip_price')->required()->floatTwo()->symbol('¥'); + $form->text('goods_unit')->help('如:斤,个,盒,500克,1000克,1500克等'); + $form->radio('is_infinite')->options(['关闭','开启'])->default(1); + $form->number('inventory')->required()->attribute('min', 1)->default(1); + $form->number('restrict_num')->attribute('min', 0)->default(0)->help('0表示不限购'); + $form->number('start_num')->attribute('min', 1)->default(1); + }); + $form->column(12, function (Form $form) { + $form->hasMany('image_banners', function (Form\NestedForm $form) { + $form->image('path')->width(2); + $form->number('sort')->width(2)->default(0); + $form->hidden('type')->value(1)->default(1); + })->required(); + $form->divider(); + $form->hasMany('video_banners', function (Form\NestedForm $form) { + $form->file('path')->width(2); + $form->number('sort')->width(2)->default(0); + $form->hidden('type')->value(2)->default(2); + }); + $form->divider(); + + $form->multipleImage('details_imgs')->help('按图片顺序上传'); + $form->text('content')->maxLength(50); + $form->text('remark')->maxLength(50); + + $form->tags('tags','标签')->options(['新品','热销','新鲜']); + $form->table('spec', function (NestedForm $table) { + $table->text('spec_key')->help('如:净含量:500克,保质期:120天,包装:12个/盒等'); + $table->text('spec_value'); + }); + $form->switch('on_sale') + ->customFormat(function ($v) { + return $v == '上架' ? 1 : 0; + }) + ->saving(function ($v) { + return $v; + }); + + $form->disableResetButton(); + $form->disableViewCheck(); + $form->disableEditingCheck(); + $form->disableCreatingCheck(); + }); + $form->saved(function (Form $form){ + $storeId = $form->input('store_id'); + + // 商品所属市场,根据店铺查询市场 + $info = StoreModel::getStoreInfo($storeId,'market_id'); + $form->market_id = $info->market_id; + }); + }); + } + +} diff --git a/app/Admin/Repositories/v3/GoodsNew.php b/app/Admin/Repositories/v3/GoodsNew.php new file mode 100644 index 0000000..22d20eb --- /dev/null +++ b/app/Admin/Repositories/v3/GoodsNew.php @@ -0,0 +1,16 @@ +resource('/goods', 'v3\GoodsController'); $router->resource('/goods_activity', 'v3\GoodsActivityController'); + $router->resource('/goods_new', 'v3\GoodsNewController'); + // banner $router->resource('/banners', 'v3\BannersController'); $router->any('/test', 'Test@test'); diff --git a/app/Models/v3/GoodsNew.php b/app/Models/v3/GoodsNew.php new file mode 100644 index 0000000..a7a5876 --- /dev/null +++ b/app/Models/v3/GoodsNew.php @@ -0,0 +1,70 @@ +'array', + 'tags'=>'array', + 'spec'=>'array', + ]; + + public static $_onSale = ['否','是']; + public static $_isInfinite = ['关闭','开启']; + + public function getCoverImgUrlAttribute($value) + { + $value = $value ? $value : $this->cover_img; + return $this->imageUrl($value); + } + public function getOnSaleTextAttribute($value) + { + $value = $value ? $value : $this->on_sale; + return isset(self::$_onSale[$value]) ? self::$_onSale[$value] : ''; + } + public function getIsInfiniteTextAttribute($value) + { + $value = $value ? $value : $this->is_infinite; + return isset(self::$_isInfinite[$value]) ? self::$_isInfinite[$value] : ''; + } + public function ImageBanners(){ + return $this->hasMany('\App\Models\v3\GoodsBanners','goods_id','id')->where('type',1); + } + + public function VideoBanners(){ + return $this->hasMany('\App\Models\v3\GoodsBanners','goods_id','id')->where('type',2); + + } + + /** + * 处理旧图片 + * @param $value + * @return string + */ + public function imageUrl($value) + { + if(strripos($value,"http") === false){ + return env('OSS_IMG_HOST').'/'.$value; + }else{ + return $value; + } + } +} diff --git a/app/Models/v3/GoodsNewBanners.php b/app/Models/v3/GoodsNewBanners.php new file mode 100644 index 0000000..dd93f1d --- /dev/null +++ b/app/Models/v3/GoodsNewBanners.php @@ -0,0 +1,18 @@ +logo; + return $this->imageUrl($value); + } + + public function getIsRestTextAttribute($value) + { + $value = $value ? $value : $this->is_rest; + return isset(self::$_onRest[$value]) ? self::$_onRest[$value] : ''; + } + public function getIsOpenTextAttribute($value) + { + $value = $value ? $value : $this->is_iopen; + return isset(self::$_isOpen[$value]) ? self::$_isOpen[$value] : ''; + } + + /** + * 获取商家环境图片 + * @param $value $this->environment + * @return array + */ + public function getEnvironmentAttribute($value) + { + $value = $value ? $value : $this->environmant; + return $value ? explode(',',$value) : []; + } + public function setEnvironmentAttribute($value) + { + $this->attributes['environment'] = implode(',',$value); + } + + /** + * 是否开启店铺 + */ + public function getIsOpenAttribute($value) + { + $value = $value ? $value : ''; + return $value ? explode(',',$value) : []; + } + public function setIsOpenAttribute($value) + { + $this->attributes['is_open'] = 1; + } + + /** + * 获取单个店铺信息 + * @param int $id + * @param string $field + * @return string + */ + public static function getStoreInfo($id,$field = '*') + { + return self::select($field)->find($id); + } + + /** + * 获取店铺数组 + * id为键,name为值 + * @return array + */ + public static function getStoreArray() + { + $list = self::select('id','name') + ->where('status',2) + ->whereNull('deleted_at') + ->get(); + $array = []; + if(count($list) > 0){ + foreach ($list as $value) { + $array[$value->id] = $value->name; + } + } + + return $array; + } + + // 处理图片 + public function imageUrl($value) + { + if(strripos($value,"http") === false){ + return env('OSS_IMG_HOST').'/'.$value; + }else{ + return $value; + } + } +} diff --git a/resources/lang/zh-CN/goods-new.php b/resources/lang/zh-CN/goods-new.php new file mode 100644 index 0000000..c67f24e --- /dev/null +++ b/resources/lang/zh-CN/goods-new.php @@ -0,0 +1,42 @@ + [ + 'GoodsNew' => '线上商品清洗', + 'goods_new' => '线上商品清洗', + ], + 'fields' => [ + 'name' => '商品名称', + 'category_id' => '所属分类', + 'goods_category_id' => '商品类目', + 'store_id' => '所属商家', + 'cover_img' => '封面图', + 'cover_img_url' => '封面图', + 'banners' => '轮播图', + + 'price' => '售价', + 'original_price' => '原价', + 'vip_price' => '会员价', + 'on_sale' => '是否上架', + 'on_sale_text' => '是否上架', + 'inventory' => '库存', + 'content' => '简介', + 'sort' => '排序', + 'restrict_num' => '限购份数', + 'start_num' => '起售份数', + 'is_infinite' => '开启无限库存', + 'is_infinite_text' => '开启无限库存', + 'goods_unit' => '商品单位', + 'tags' => '标签', + 'details_imgs' => '详情图片', + 'spec' => '规格', + 'unit_number' => '单位前的数', + 'remark' => '备注', + 'spec_key' =>'规格名称', + 'spec_value' => '规格参数', + 'market_id' => '市场', + 'image_banners' => '轮播图片', + 'video_banners' => '轮播视频' + ], + 'options' => [ + ], +];