Browse Source

添加分类,添加banner

master
liangyuyan 5 years ago
parent
commit
cf45e1de94
  1. 1
      .gitignore
  2. 46
      app/Admin/Common/Images.php
  3. 122
      app/Admin/Common/StoreQRCode.php
  4. 94
      app/Admin/Controllers/BannerController.php
  5. 34
      app/Admin/Controllers/CategoryController.php
  6. 9
      app/Admin/Controllers/GoodsController.php
  7. 21
      app/Admin/Controllers/GoodsTypeController.php
  8. 52
      app/Admin/Controllers/StoreController.php
  9. 12
      app/Admin/Controllers/StoreTypeController.php
  10. 16
      app/Admin/Repositories/Banner.php
  11. 4
      app/Admin/routes.php
  12. 16
      app/Models/Banner.php
  13. 23
      app/Models/Category.php
  14. 8
      app/Models/GoodsType.php
  15. 2
      app/Models/ImsCjdcMarket.php
  16. 35
      app/Models/ImsCjdcUser.php
  17. 2
      app/Models/LanzuMmInfo.php
  18. 1
      app/Models/Store.php
  19. 9
      app/Models/StoreType.php
  20. 1
      composer.json
  21. 88
      composer.lock
  22. 42
      database/migrations/2020_09_03_192404_create_lanzu_banners_table.php
  23. 522
      dcat_admin_ide_helper.php
  24. 2
      public/vendors/dcat-admin/adminlte/adminlte-blue-dark.css
  25. 2
      public/vendors/dcat-admin/adminlte/adminlte-blue-light.css
  26. 2
      public/vendors/dcat-admin/adminlte/adminlte-blue.css
  27. 2
      public/vendors/dcat-admin/adminlte/adminlte-green.css
  28. 2
      public/vendors/dcat-admin/adminlte/adminlte.css
  29. 2
      public/vendors/dcat-admin/adminlte/adminlte.js
  30. 2
      public/vendors/dcat-admin/adminlte/adminlte.js.map
  31. 2
      public/vendors/dcat-admin/dcat/css/dcat-app-blue-dark.css
  32. 2
      public/vendors/dcat-admin/dcat/css/dcat-app-blue-light.css
  33. 2
      public/vendors/dcat-admin/dcat/css/dcat-app-blue.css
  34. 2
      public/vendors/dcat-admin/dcat/css/dcat-app-green.css
  35. 2
      public/vendors/dcat-admin/dcat/css/dcat-app.css
  36. 2
      public/vendors/dcat-admin/dcat/extra/action.js
  37. 2
      public/vendors/dcat-admin/dcat/extra/action.js.map
  38. 2
      public/vendors/dcat-admin/dcat/extra/grid-extend.js
  39. 2
      public/vendors/dcat-admin/dcat/extra/grid-extend.js.map
  40. 2
      public/vendors/dcat-admin/dcat/extra/upload-blue-dark.css
  41. 2
      public/vendors/dcat-admin/dcat/extra/upload-blue-light.css
  42. 2
      public/vendors/dcat-admin/dcat/extra/upload-blue.css
  43. 2
      public/vendors/dcat-admin/dcat/extra/upload-green.css
  44. 2
      public/vendors/dcat-admin/dcat/extra/upload.css
  45. 2
      public/vendors/dcat-admin/dcat/extra/upload.js
  46. 2
      public/vendors/dcat-admin/dcat/extra/upload.js.map
  47. 2
      public/vendors/dcat-admin/dcat/js/dcat-app.js
  48. 2
      public/vendors/dcat-admin/dcat/js/dcat-app.js.map
  49. BIN
      public/vendors/dcat-admin/images/default-avatar.jpg
  50. BIN
      public/vendors/dcat-admin/images/logo.png
  51. 21
      resources/lang/zh-CN/banner.php
  52. 9
      resources/lang/zh-CN/global.php
  53. 2
      resources/lang/zh-CN/goods-type.php
  54. 4
      resources/lang/zh-CN/store.php

1
.gitignore

@ -14,3 +14,4 @@ yarn-error.log
.idea
.vscode/launch.json
/storage/debugbar
/public/vendors

46
app/Admin/Common/Images.php

@ -9,17 +9,16 @@ use GuzzleHttp\Client;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
class Images extends AdminController
{
/**
* 获取token
*/
private function getWxToken()
{
//获取token
$row = DB::table('ims_cjdc_system')
->select('appid','appsecret')
->where('uniacid', 2)
->first();
$appid=$row->appid;
$secret=$row->appsecret;
$appid= env('WECHAT_MINI_PROGRAM_APPID');
$secret=env('WECHAT_MINI_PROGRAM_SECRET');
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
@ -31,6 +30,9 @@ class Images extends AdminController
return $data['access_token'];
}
/**
* 请求生成微信小程序码
*/
public function createQrCode($param,$path)
{
$access_token = $this->getWxToken();
@ -53,6 +55,31 @@ class Images extends AdminController
}
/**
* 请求生成微信二维码
* @param $param 参数
*/
public function createWeChatQrCode($param,$path)
{
$access_token = $this->getWxToken();
$data=array(
"path"=>$path.$param,
"width"=>280
);
$data = json_encode($data);
$url = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=".$access_token."";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
/**
* 上传文件到oss
* @param $base64 //文件流
@ -64,7 +91,6 @@ class Images extends AdminController
return Storage::put($fileName,$base64);
}
public function test()
{
$wx_head = 'http://www.marketmanage.com/uploads/20200728/d5a491cd3d8d071e3212c3478e8e35a1.jpg';
@ -72,11 +98,7 @@ class Images extends AdminController
file_put_contents('./logo.jpg',$avatar_file);
$logo = $this->changeAvatar($avatar_file);
file_put_contents('./logo_new.jpg',$logo);
//$qr_code = $this->createQrCode('','');
}

122
app/Admin/Common/StoreQRCode.php

@ -0,0 +1,122 @@
<?php
namespace App\Admin\Common;
use Dcat\Admin\Controllers\AdminController;
use EasyWeChat\Factory;
use Intervention\Image\ImageManager;
class StoreQRCode extends AdminController
{
protected $images;
protected $imageManager;
public function __construct()
{
$this->images = new Images();
// $this->imageManager = new ImageManager();
}
/**
* 生成小程序码 永久 还没完成
* @param $scene 参数
* @param $optional
*/
public function getUnlimited(string $scene, array $optional = [])
{
$wxCode = Factory::payment(config('wechat.mini_program.default'));
$res = $wxCode->app_code->getUnlimited($scene,$optional);
}
/**
* 生成店铺的微信小程序码
*/
public function SetStoreWeChatCode($id)
{
$codeStore = $this->images->createQrCode($id,'zh_cjdianc/pages/takeout/takeoutindex');
$storeImgPath = 'QR_code/code_store_img/wx_store_'.$id.'.jpg';
$res = $this->images->uploadOss($codeStore,$storeImgPath);
if($res){
return ['status' => true ,'path' => $storeImgPath];
}else{
return ['status' => false ,'path' => ''];
}
}
/**
* 生成店铺收银的微信二维码
*/
public function SetPayWeChatCode($id)
{
$isCREATE = env('IS_CREATE_WECHAT_MINI_QR_CODE',1);
if($isCREATE == 0){
$codeStore = $this->images->createQrCode($id,'zh_cjdianc/pages/seller/fukuan');
$storeImgPath = 'QR_code/code_minipay_img/wx_minipay_'.$id.'.jpg';
}else{
$codeStore = $this->images->createWeChatQrCode('?scene='.$id,'zh_cjdianc/pages/seller/fukuan');
$storeImgPath = 'QR_code/code_pay_img/wx_pay_'.$id.'.jpg';
// 裁剪
}
// 裁剪测试
// $this->imageManager->make()->resize(270,270)->insert($codeStore);
$res = $this->images->uploadOss($codeStore,$storeImgPath);
if($res){
return ['status' => true ,'path' => $storeImgPath];
}else{
return ['status' => false ,'path' => ''];
}
}
/**
* 店铺收银码裁剪
*/
public function setStoreCodeImg($file_path,$storeId){
$save_path = './QR_code/wx_store_pay_cut/wx_pay_'.$storeId.'.jpg';
if(!file_exists($save_path)){
//将图片进行裁剪
if(file_exists($file_path)){
$save_width = 270;
$start_spot_x = 5;
$start_spot_y = 5;
$width = 270;
$height = 270;
$this->tailoringImg($save_path,$file_path,$save_width,$start_spot_x,$start_spot_y,$width,$height,1);
}else{
return '';
}
}
return $save_path;
}
/**
* 裁剪图片
*/
public function tailoringImg($save_path,$file_path,$save_width,$start_spot_x,$start_spot_y,$width,$height,$display=1)
{
if(file_exists($file_path) && is_readable($file_path)){
//从字符串中的图像流新建一图像
$src = imagecreatefromstring(file_get_contents($file_path));
//保存图片的高
$save_height = round($save_width*$height/$width);
//根据要保存的宽和高创建图片
$new_image = imagecreatetruecolor($save_width, $save_height);
//生成最后的图片
imagecopyresampled($new_image, $src, 0, 0, $start_spot_x, $start_spot_y, $save_width, $save_height, $width, $height);
// header('Content-Type: image/jpeg');
imagejpeg($new_image,$save_path);
imagedestroy($src);
imagedestroy($new_image);
}
}
}

94
app/Admin/Controllers/BannerController.php

@ -0,0 +1,94 @@
<?php
namespace App\Admin\Controllers;
use App\Admin\Repositories\Banner;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Controllers\AdminController;
use App\Models\ImsCjdcMarket as MarketModel;
class BannerController extends AdminController
{
/**
* Make a grid builder.
*
* @return Grid
*/
protected function grid()
{
return Grid::make(new Banner(), function (Grid $grid) {
$grid->column('id')->sortable();
$grid->column('market_id');
$grid->column('title');
$grid->column('sub_title');
$grid->column('cover')->image(50);
$grid->column('cover_type');
$grid->column('path');
$grid->column('path_type');
$grid->column('sort');
$grid->column('status');
$grid->column('type');
$grid->column('created_at');
$grid->column('updated_at')->sortable();
$grid->filter(function (Grid\Filter $filter) {
$filter->equal('id');
});
});
}
/**
* Make a show builder.
*
* @param mixed $id
*
* @return Show
*/
protected function detail($id)
{
return Show::make($id, new Banner(), function (Show $show) {
$show->field('id');
$show->field('market_id');
$show->field('title');
$show->field('sub_title');
$show->field('cover');
$show->field('cover_type');
$show->field('path');
$show->field('path_type');
$show->field('sort');
$show->field('status');
$show->field('type');
$show->field('created_at');
$show->field('updated_at');
});
}
/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Form::make(new Banner(), function (Form $form) {
$form->display('id');
// 市场
$marketList = MarketModel::getMarket();
$form->select('market_id')->width(4)->options($marketList);
$form->text('title');
$form->text('sub_title');
$form->image('cover')->width(2);
$form->select('cover_type')->options([1=>'图片', 2=>'视频']);
$form->text('path');
$form->select('path_type')->options(['page'=>'page','webview'=>'webview','applet'=>'applet']);
$form->text('sort');
$form->select('type')->options([1=>'首页banner']);
$form->display('created_at');
$form->display('updated_at');
});
}
}

34
app/Admin/Controllers/CategoryController.php

@ -0,0 +1,34 @@
<?php
namespace App\Admin\Controllers;
use App\Models\Category;
use Dcat\Admin\Form;
use Dcat\Admin\Layout\Row;
use Dcat\Admin\Layout\Content;
use Dcat\Admin\Tree;
use Dcat\Admin\Controllers\AdminController;
class CategoryController extends AdminController
{
public function index(Content $content)
{
return $content->header('树状模型')
->body(function (Row $row) {
$tree = new Tree(new Category);
$row->column(12, $tree);
});
}
public function form()
{
return Form::make(new Category(),function (Form $form){
$form->text('title');
$form->number('sort');
// 只查一级
$form->select('parent_id')->default(51);
$form->image('cover_img');
});
}
}

9
app/Admin/Controllers/GoodsController.php

@ -108,7 +108,7 @@ class GoodsController extends AdminController
$form->select('goods_type_id')->required()->options($goodsTypeList);
$form->select('store_id')->required()->options($storeList);
$form->text('name')->required()->maxLength(20);
$form->image('cover_img');
$form->image('cover_img')->required();
$form->number('sort');
});
$form->column(6, function (Form $form) {
@ -126,7 +126,7 @@ class GoodsController extends AdminController
$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);
@ -151,6 +151,11 @@ class GoodsController extends AdminController
->saving(function ($v) {
return $v;
});
$form->disableResetButton();
$form->disableViewCheck();
$form->disableEditingCheck();
$form->disableCreatingCheck();
});
});
}

21
app/Admin/Controllers/GoodsTypeController.php

@ -7,6 +7,8 @@ use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Controllers\AdminController;
use App\Models\StoreType as StoreTypeModel;
use App\Models\GoodsType as GoodsTypeModel;
class GoodsTypeController extends AdminController
{
@ -21,6 +23,10 @@ class GoodsTypeController extends AdminController
$grid->id->sortable();
$grid->cover_img->image('',50);
$grid->type_name;
$grid->store_type_id->display(function ($storeTypeId){
$storeType = StoreTypeModel::getStoreTypeInfo($storeTypeId,'type_name');
return empty($storeType) ? '' : $storeType->type_name;
});
$grid->sort->sortable();
// 排序
$grid->model()->orderBy('id', 'desc');
@ -59,8 +65,19 @@ class GoodsTypeController extends AdminController
*/
protected function form()
{
return Form::make(new GoodsType(), function (Form $form) {
$builder = GoodsTypeModel::with('correlation');
return Form::make($builder, function (Form $form) {
$form->hidden('id');
// 查询一级分类(店铺分类)
$storeTypeList = StoreTypeModel::getStoreTypeArray();
// $form->select('store_type_id')->options($storeTypeList);
$form->hasMany('correlation',function (Form\NestedForm $form) use($storeTypeList){
$form->select('store_type_id')->options($storeTypeList);
$form->hidden('goods_type_id')->value($form->getKey());
});
$form->text('type_name')->required()->maxLength(20,'最多只能输入20个中文字');
/* uniqueName图片名称唯一,否则可能图片上传失败 */
@ -72,6 +89,8 @@ class GoodsTypeController extends AdminController
$form->disableViewCheck();
$form->disableEditingCheck();
$form->disableCreatingCheck();
});
}
}

52
app/Admin/Controllers/StoreController.php

@ -10,8 +10,10 @@ use Dcat\Admin\Controllers\AdminController;
use App\Models\StoreType as StoreTypeModel;
use App\Models\LanzuMmInfo as MminfoModel;
use App\Models\ImsCjdcMarket as MarketModel;
use App\Admin\Common\Images as QrCode;
use App\Admin\Common\StoreQRCode;
use App\Admin\Repositories\StoreType;
use App\Models\Store as StoreModel;
use App\Models\ImsCjdcUser as UserModel;
class StoreController extends AdminController
{
@ -36,10 +38,8 @@ class StoreController extends AdminController
$mmUser = MminfoModel::getMmInfo($mmUserId,'name');
return empty($mmUser) ? '' : $mmUser->name;
});
$grid->store_type_id->display(function ($storeTypeId){
$storeType = StoreTypeModel::getStoreTypeInfo($storeTypeId,'type_name');
return empty($storeType) ? '' : $storeType->type_name;
});
$grid->store_applet_img->image('',50);
$grid->cash_code_img->image('',50);
$grid->sort->sortable();
$grid->is_rest->switch();
@ -115,11 +115,14 @@ class StoreController extends AdminController
$marketList = MarketModel::getMarket();
// 查询一级分类(店铺分类)
$storeTypeList = StoreTypeModel::getStoreTypeArray();
// 用户
$userList = UserModel::getUserArray();
$form->column(6, function (Form $form) use($mmList,$marketList,$storeTypeList){
$form->hidden('id');
$form->select('mm_user_id')->options($mmList);
$form->select('market_id')->required()->options($marketList);
// $form->select('store_type_id')->required()->options($storeTypeList);
$form->select('store_type_id')->required()->options($storeTypeList);
$form->text('name')->required()->maxLength(50);
$form->image('logo')->required();
$form->mobile('tel');
@ -142,23 +145,20 @@ class StoreController extends AdminController
})->default(1);
$form->text('address');
});
$form->column(6, function (Form $form) use($mmList,$marketList,$storeTypeList){
$form->column(6, function (Form $form) {
$form->image('business_license')->required();
$form->image('zm_img')->required();
$form->image('fm_img')->required();
$form->text('admin_id')->required();
$form->text('user_id')->required();
$form->text('admin_id')->required();/*需要优化 一个用户只能绑定一家店铺*/
$form->text('user_id')->required();/*需要优化 一个用户只能绑定一家店铺*/
$form->timeRange('time1','time2','营业时间段一')->required();
$form->timeRange('time3','time4','营业时间段二');
});
$form->column(12, function (Form $form) use($mmList,$marketList,$storeTypeList){
$form->column(12, function (Form $form) {
$form->map('lat','lng','地址');
$form->textarea('introduction')->required();
$form->textarea('announcement');
$form->multipleImage('environment');
// $form->text('expire_time');
});
// $form->text('coordinates')->width(4)
@ -169,22 +169,28 @@ class StoreController extends AdminController
$id = $form->getKey();
// $form->isCreating() &&
if(!empty($id)){
$qrCode = new StoreQRCode();
// 生成小程序码 店铺
$qrCode = new QrCode();
$codeStore = $qrCode->createQrCode($id,'zh_cjdianc/pages/takeout/takeoutindex');//var_dump($codeStore);
$storeImg = $qrCode->uploadOss($codeStore,'data/code_store_img/wx_store_'.$id.'.jpg');var_dump($storeImg);
$sRes = $qrCode->SetStoreWeChatCode($id);
// 生产小程序码 收银
$codePAy = $qrCode->createQrCode($id,'zh_cjdianc/pages/seller/fukuan');//var_dump($codePAy);
$PayImg = $qrCode->uploadOss($codePAy,'data/code_minipay_img/wx_minipay_'.$id.'.jpg');var_dump($PayImg);
$pRes = $qrCode->SetPayWeChatCode($id);
dd(11);
// 保存图片
$storeModel = new StoreModel();
$storeModel->store_applet_img = $storeImg;
$storeModel->cash_code_img = $PayImg;
$storeModel->save();
$store = StoreModel::find($id);
$store->store_applet_img = $sRes['status'] ? $sRes['path'] : '';
$store->cash_code_img = $pRes['status'] ? $pRes['path'] : '';;
$store->save();
// 剪裁图片
// $form->image('cash_code_img')->crop(270, 270, [5, 5]);
}
});
$form->disableResetButton();
$form->disableViewCheck();
$form->disableEditingCheck();
$form->disableCreatingCheck();
});
}

12
app/Admin/Controllers/StoreTypeController.php

@ -7,6 +7,8 @@ use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Controllers\AdminController;
use App\Models\GoodsType as GoodsTypeModel;
use App\Models\StoreType as StoreTypeModel;
class StoreTypeController extends AdminController
{
@ -59,13 +61,23 @@ class StoreTypeController extends AdminController
*/
protected function form()
{
$builder = StoreTypeModel::with('correlation');
return Form::make(new StoreType(), function (Form $form) {
$form->hidden('id');
// 二级分类
$goodsTypeList = GoodsTypeModel::getGoodsTypeArray();
$form->text('type_name')->required()->maxLength(20,'最多只能输入20个中文字');
/* uniqueName图片名称唯一,否则可能图片上传失败 */
$form->image('cover_img')->required()->uniqueName();
//选择二级分类
$form->hasMany('correlation',function (Form\NestedForm $form) {
$form->multipleSelect();
});
$form->number('sort')->width(100);
$form->disableResetButton();

16
app/Admin/Repositories/Banner.php

@ -0,0 +1,16 @@
<?php
namespace App\Admin\Repositories;
use App\Models\Banner as Model;
use Dcat\Admin\Repositories\EloquentRepository;
class Banner extends EloquentRepository
{
/**
* Model.
*
* @var string
*/
protected $eloquentClass = Model::class;
}

4
app/Admin/routes.php

@ -47,9 +47,11 @@ Route::group([
// 分类
$router->resource('/storeType', 'StoreTypeController');
$router->resource('/goodsType', 'GoodsTypeController');
$router->resource('/typeCorrelation', 'TypeCorrelationController');
$router->resource('/category', 'CategoryController');
// 店铺
$router->resource('/store', 'StoreController');
// 商品
$router->resource('/goods', 'GoodsController');
// banner
$router->resource('/banner', 'BannerController');
});

16
app/Models/Banner.php

@ -0,0 +1,16 @@
<?php
namespace App\Models;
use Dcat\Admin\Traits\HasDateTimeFormatter;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Model;
class Banner extends Model
{
use HasDateTimeFormatter;
use SoftDeletes;
protected $table = 'lanzu_banners';
protected $dateFormat = 'U';
}

23
app/Models/Category.php

@ -0,0 +1,23 @@
<?php
namespace App\Models;
use Dcat\Admin\Traits\ModelTree;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
use ModelTree;
protected $table = 'lanzu_category';
protected $dateFormat = 'U';
// 父级ID字段名称,默认值为 parent_id
// protected $parentColumn = 'pid';
// 排序字段名称,默认值为 order
protected $orderColumn = 'sort';
// 标题字段名称,默认值为 title
// protected $titleColumn = 'name';
}

8
app/Models/GoodsType.php

@ -20,6 +20,14 @@ class GoodsType extends Model
'updated_at_text'
];
/**
* 关联关系
*/
public function correlation()
{
return $this->hasMany(TypeCorrelation::class,'goods_type_id','id');
}
public function getCreatedAtTextAttribute($value)
{
$value = $value ? $value : $this->created_at;

2
app/Models/ImsCjdcMarket.php

@ -11,7 +11,7 @@ class ImsCjdcMarket extends Model
use HasDateTimeFormatter;
use SoftDeletes;
protected $table = 'ims_cjdc_market';
protected $table = 'lanzu_market';
protected $dateFormat = 'U';
public function setImgsAttribute($imgs)
{

35
app/Models/ImsCjdcUser.php

@ -10,6 +10,39 @@ use Illuminate\Database\Eloquent\Model;
class ImsCjdcUser extends Model
{
protected $table = 'ims_cjdc_user';
protected $table = 'lanzu_user';
protected $dateFormat = 'U';
/**
* 获取单个用户信息
* @param int $id
* @param string $field
* @return object
*/
public static function getUserInfo($id,$field = '*')
{
return self::select($field)->find($id);
}
/**
* 获取用户数组
* id为键,name为值
* @return array
*/
public static function getUserArray()
{
$list = self::select('id','nick_name')
->where('status',1)
->whereNull('deleted_at')
->get();
$array = [];
if(count($list) > 0){
foreach ($list as $value) {
$array[$value->id] = $value->nick_name;
}
}
return $array;
}
}

2
app/Models/LanzuMmInfo.php

@ -24,7 +24,7 @@ class LanzuMmInfo extends Model
public static function getMmInfoArray()
{
$list = self::select('id','name')
->where('status',1)
->where('status',2)
->whereNull('deleted_at')
->get();
$array = [];

1
app/Models/Store.php

@ -20,7 +20,6 @@ class Store extends Model
'logo_url',
];
public function getLogoUrlAttribute($value)
{
$value = $value ? $value : $this->logo;

9
app/Models/StoreType.php

@ -6,6 +6,7 @@ use Dcat\Admin\Traits\HasDateTimeFormatter;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Model;
use phpDocumentor\Reflection\Project;
use App\Models\TypeCorrelation;
class StoreType extends Model
{
@ -21,6 +22,14 @@ class StoreType extends Model
'updated_at_text'
];
/**
* 关联关系
*/
public function correlation()
{
return $this->hasMany(TypeCorrelation::class,'store_type_id','id');
}
public function getCreatedAtTextAttribute($value)
{
$value = $value ? $value : $this->created_at;

1
composer.json

@ -14,6 +14,7 @@
"fruitcake/laravel-cors": "^1.0",
"guzzlehttp/guzzle": "^6.3",
"iidestiny/laravel-filesystem-oss": "^2.0",
"intervention/image": "^2.5",
"laravel/framework": "^7.0",
"laravel/tinker": "^2.0",
"overtrue/laravel-wechat": "~5.0"

88
composer.lock

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "b3d2ad98d7c44d90fdb1789d0ac90e0f",
"content-hash": "f898c3e5903c41e38a0a604e55f7da6e",
"packages": [
{
"name": "aliyuncs/oss-sdk-php",
@ -165,16 +165,16 @@
},
{
"name": "dcat/laravel-admin",
"version": "1.7.0",
"version": "1.7.1",
"source": {
"type": "git",
"url": "https://github.com/jqhph/dcat-admin.git",
"reference": "8d66a400243146c2c80ba4805692066d7035d34a"
"reference": "b2694de229a9fd52f9ab048870d4e93b8ee7a505"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/jqhph/dcat-admin/zipball/8d66a400243146c2c80ba4805692066d7035d34a",
"reference": "8d66a400243146c2c80ba4805692066d7035d34a",
"url": "https://api.github.com/repos/jqhph/dcat-admin/zipball/b2694de229a9fd52f9ab048870d4e93b8ee7a505",
"reference": "b2694de229a9fd52f9ab048870d4e93b8ee7a505",
"shasum": "",
"mirrors": [
{
@ -233,7 +233,7 @@
"laravel",
"laravel admin"
],
"time": "2020-08-24T08:10:00+00:00"
"time": "2020-09-02T13:19:24+00:00"
},
{
"name": "dnoegel/php-xdg-base-dir",
@ -1319,6 +1319,82 @@
"description": "Oss storage filesystem for Laravel.",
"time": "2020-03-28T15:21:51+00:00"
},
{
"name": "intervention/image",
"version": "2.5.1",
"source": {
"type": "git",
"url": "https://github.com/Intervention/image.git",
"reference": "abbf18d5ab8367f96b3205ca3c89fb2fa598c69e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Intervention/image/zipball/abbf18d5ab8367f96b3205ca3c89fb2fa598c69e",
"reference": "abbf18d5ab8367f96b3205ca3c89fb2fa598c69e",
"shasum": "",
"mirrors": [
{
"url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
"preferred": true
}
]
},
"require": {
"ext-fileinfo": "*",
"guzzlehttp/psr7": "~1.1",
"php": ">=5.4.0"
},
"require-dev": {
"mockery/mockery": "~0.9.2",
"phpunit/phpunit": "^4.8 || ^5.7"
},
"suggest": {
"ext-gd": "to use GD library based image processing.",
"ext-imagick": "to use Imagick based image processing.",
"intervention/imagecache": "Caching extension for the Intervention Image library"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.4-dev"
},
"laravel": {
"providers": [
"Intervention\\Image\\ImageServiceProvider"
],
"aliases": {
"Image": "Intervention\\Image\\Facades\\Image"
}
}
},
"autoload": {
"psr-4": {
"Intervention\\Image\\": "src/Intervention/Image"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Oliver Vogel",
"email": "oliver@olivervogel.com",
"homepage": "http://olivervogel.com/"
}
],
"description": "Image handling and manipulation library with support for Laravel integration",
"homepage": "http://image.intervention.io/",
"keywords": [
"gd",
"image",
"imagick",
"laravel",
"thumbnail",
"watermark"
],
"time": "2019-11-02T09:15:47+00:00"
},
{
"name": "laravel/framework",
"version": "v7.22.4",

42
database/migrations/2020_09_03_192404_create_lanzu_banners_table.php

@ -0,0 +1,42 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateLanzuBannersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('lanzu_banners', function (Blueprint $table) {
$table->increments('id');
$table->bigInteger('market_id')->default('0')->comment('市场');
$table->string('title')->default('')->comment('标题');
$table->string('sub_title')->default('')->comment('副标题');
$table->string('cover')->default('')->comment('封面');
$table->integer('cover_type')->default('1')->comment('封面类型');
$table->string('path')->default('')->comment('链接');
$table->char('path_type')->comment('链接类型');
$table->integer('sort')->default('0')->comment('排序');
$table->integer('status')->default('1')->comment('状态');
$table->integer('type')->default('0')->comment('位置');
$table->timestamps();
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('lanzu_banners');
}
}

522
dcat_admin_ide_helper.php
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/adminlte/adminlte-blue-dark.css
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/adminlte/adminlte-blue-light.css
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/adminlte/adminlte-blue.css
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/adminlte/adminlte-green.css
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/adminlte/adminlte.css
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/adminlte/adminlte.js
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/adminlte/adminlte.js.map
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/dcat/css/dcat-app-blue-dark.css
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/dcat/css/dcat-app-blue-light.css
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/dcat/css/dcat-app-blue.css
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/dcat/css/dcat-app-green.css
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/dcat/css/dcat-app.css
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/dcat/extra/action.js

@ -1,2 +1,2 @@
!function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=6)}({6:function(e,t,n){e.exports=n(7)},7:function(module,exports){function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function _createClass(e,t,n){return t&&_defineProperties(e.prototype,t),n&&_defineProperties(e,n),e}!function(Dcat){var Action=function(){function Action(e){_classCallCheck(this,Action),this.options=$.extend({selector:null,event:"click",method:"POST",key:null,url:null,data:{},confirm:null,calledClass:null,before:function(e,t){},html:function(e,t,n){e.html(t)},success:function(e,t){},error:function(e,t){}},e),this._bind()}return _createClass(Action,[{key:"_bind",value:function(){var e=this,t=e.options;$(t.selector).off(t.event).on(t.event,(function(n){var o=$(this).data(),r=$(this);if(!(r.attr("loading")>0)&&!1!==t.before(o,r,e)){var a=t.confirm;a?Dcat.confirm(a[0],a[1],i):i()}function i(){r.attr("loading",1),Object.assign(o,t.data),e._buildActionPromise(r,o).then(e._resolver()).catch(e._reject())}}))}},{key:"_resolver",value:function _resolver(){var _this=this,options=_this.options;return function(result){var response=result[0],target=result[1];if(!1!==options.success(target,response)){if("object"!==_typeof(response))return Dcat.error({type:"error",title:"Oops!"});var then=function then(_then){switch(_then.action){case"refresh":Dcat.reload();break;case"download":window.open(_then.value,"_blank");break;case"redirect":Dcat.reload(_then.value);break;case"location":window.location=_then.value;break;case"script":!function(){eval(_then.value)}()}};"string"==typeof response.html&&response.html&&options.html(target,response.html,response),"string"==typeof response.data.message&&response.data.type&&Dcat[response.data.type](response.data.message),response.data.then&&then(response.data.then)}}}},{key:"_reject",value:function(){var e=this.options;return function(t){var n=t[0],o=t[1];!1!==e.success(o,n)&&(n&&"object"===_typeof(n.responseJSON)&&Dcat.error(n.responseJSON.message),console.error(n))}}},{key:"_buildActionPromise",value:function(e,t){var n=this.options;return new Promise((function(o,r){Object.assign(t,{_token:Dcat.token,_action:n.calledClass,_key:n.key}),Dcat.NP.start(),$.ajax({method:n.method,url:n.url,data:t,success:function(t){e.attr("loading",0),Dcat.NP.done(),o([t,e])},error:function(t){e.attr("loading",0),Dcat.NP.done(),r([t,e])}})}))}}]),Action}();Dcat.Action=function(e){return new Action(e)}}(Dcat)}});
!function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=6)}({6:function(e,t,n){e.exports=n(7)},7:function(module,exports){function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function _createClass(e,t,n){return t&&_defineProperties(e.prototype,t),n&&_defineProperties(e,n),e}!function(Dcat){var Action=function(){function Action(e){_classCallCheck(this,Action),this.options=$.extend({selector:null,event:"click",method:"POST",key:null,url:null,data:{},confirm:null,calledClass:null,before:function(e,t){},html:function(e,t,n){e.html(t)},success:function(e,t){},error:function(e,t){}},e),this.init()}return _createClass(Action,[{key:"init",value:function(){var e=this,t=e.options;$(t.selector).off(t.event).on(t.event,(function(n){var o=$(this).data(),r=$(this);if(!(r.attr("loading")>0)&&!1!==t.before(o,r,e)){var a=t.confirm;a?Dcat.confirm(a[0],a[1],s):s()}function s(){r.attr("loading",1),Object.assign(o,t.data),e.promise(r,o).then(e.resolve()).catch(e.reject())}}))}},{key:"resolve",value:function resolve(){var _this=this,options=_this.options;return function(result){var response=result[0],target=result[1];if(!1!==options.success(target,response)){if("object"!==_typeof(response))return Dcat.error({type:"error",title:"Oops!"});var then=function then(_then){switch(_then.action){case"refresh":Dcat.reload();break;case"download":window.open(_then.value,"_blank");break;case"redirect":Dcat.reload(_then.value);break;case"location":window.location=_then.value;break;case"script":!function(){eval(_then.value)}()}};"string"==typeof response.html&&response.html&&options.html(target,response.html,response),"string"==typeof response.data.message&&response.data.type&&Dcat[response.data.type](response.data.message),response.data.then&&then(response.data.then)}}}},{key:"reject",value:function(){var e=this.options;return function(t){var n=t[0],o=t[1];!1!==e.success(o,n)&&(n&&"object"===_typeof(n.responseJSON)&&Dcat.error(n.responseJSON.message),console.error(n))}}},{key:"promise",value:function(e,t){var n=this.options;return new Promise((function(o,r){Object.assign(t,{_action:n.calledClass,_key:n.key}),Dcat.NP.start(),$.ajax({method:n.method,url:n.url,data:t,success:function(t){e.attr("loading",0),Dcat.NP.done(),o([t,e])},error:function(t){e.attr("loading",0),Dcat.NP.done(),r([t,e])}})}))}}]),Action}();Dcat.Action=function(e){return new Action(e)}}(Dcat)}});
//# sourceMappingURL=action.js.map

2
public/vendors/dcat-admin/dcat/extra/action.js.map
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/dcat/extra/grid-extend.js
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/dcat/extra/grid-extend.js.map
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/dcat/extra/upload-blue-dark.css
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/dcat/extra/upload-blue-light.css
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/dcat/extra/upload-blue.css
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/dcat/extra/upload-green.css
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/dcat/extra/upload.css
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/dcat/extra/upload.js
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/dcat/extra/upload.js.map
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/dcat/js/dcat-app.js
File diff suppressed because it is too large
View File

2
public/vendors/dcat-admin/dcat/js/dcat-app.js.map
File diff suppressed because it is too large
View File

BIN
public/vendors/dcat-admin/images/default-avatar.jpg

Before

Width: 70  |  Height: 70  |  Size: 3.8 KiB

After

Width: 200  |  Height: 200  |  Size: 6.8 KiB

BIN
public/vendors/dcat-admin/images/logo.png

Before

Width: 120  |  Height: 120  |  Size: 6.3 KiB

After

Width: 225  |  Height: 225  |  Size: 7.8 KiB

21
resources/lang/zh-CN/banner.php

@ -0,0 +1,21 @@
<?php
return [
'labels' => [
'Banner' => '横幅管理',
'banner' => '横幅管理',
],
'fields' => [
'market_id' => '市场',
'title' => '标题',
'sub_title' => '副标题',
'cover' => '封面',
'cover_type' => '封面类型',
'path' => '链接',
'path_type' => '链接类型',
'sort' => '排序',
'status' => '状态',
'type' => '位置',
],
'options' => [
],
];

9
resources/lang/zh-CN/global.php

@ -21,9 +21,6 @@ return [
'roles' => '角色',
'path' => '路径',
'input' => '输入',
'created_at_text' => '创建时间',
'updated_at_text' => '修改时间',
],
'labels' => [
'list' => '列表',
@ -33,11 +30,7 @@ return [
'root' => '顶级',
'scaffold' => '代码生成器',
],
'options' => [
'permissions' => [
//
],
],
];

2
resources/lang/zh-CN/goods-type.php

@ -9,6 +9,8 @@ return [
'cover_img' => '封面图',
'cover_img_url' => '封面图',
'sort' => '排序',
'store_type_id' => '上级分类',
'correlation' =>'上级分类'
],
'options' => [
],

4
resources/lang/zh-CN/store.php

@ -23,7 +23,7 @@ return [
'business_license' => '营业资质',
'store_type_id' => '店铺所属分类',
'store_type_name' => '店铺分类',
'is_open' => '是否开启门店',
'is_open' => '开启门店',
'sort' => '排序',
'user_id' => '提现用户',
'environment' => '商家环境',
@ -35,6 +35,8 @@ return [
'admin_id' => '管理员',
'loudspeaker_imei' => '喇叭终端的机器码IMEI码',
'mm_user_id' => '所属市场经理',
'cash_code_img' => '商家收银码',
'store_applet_img' => '商家小程序码'
],
'options' => [
],

Loading…
Cancel
Save