| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071 | <?phpnamespace App\Admin\Controllers\Content;use App\Admin\Extensions\Field\Template;use App\Admin\Extensions\Form\ValueForm;use App\Http\Controllers\Controller;use App\Models\Ad;use App\Models\AdCategory;use App\Models\Subsite;use App\Models\SubsiteAd;use Encore\Admin\Controllers\HasResourceActions;use Encore\Admin\Facades\Admin;use Encore\Admin\Form;use Encore\Admin\Grid;use Encore\Admin\Grid\Filter;use Encore\Admin\Layout\Content;use Encore\Admin\Show;use Illuminate\Http\Request;use Illuminate\Support\Facades\Cache;//use Encore\Admin\Grid;class AdController extends Controller{    use HasResourceActions;    /**     * Index interface.     *     * @param Content $content     * @return Content     */    public function index(Content $content)    {        return $content            ->header('广告列表')            ->description(' ')            ->body(view('admin.content.ad_list')->with(['grid' => $this->grid()]));    }    /**     * Show interface.     *     * @param mixed $id     * @param Content $content     * @return Content     */    public function show($id, Content $content)    {        return $content            ->header('广告列表')            ->description(' ')            ->body($this->detail($id));    }    /**     * Edit interface.     *     * @param mixed $id     * @param Content $content     * @return Content     */    public function edit($id, Content $content)    {        $info    = Ad::find($id);        $form    = new ValueForm();        $ad_info = Ad::findOrFail($id);        //$form->action('/admin/content/ads/update');        $form->action(route('admin.ad.update'));        $form->attribute('enctype', 'multipart/form-data');        $form->disablePjax();        $form->text('title', '广告标题')->default($ad_info->title)->help('(区分不同广告条目,并不在广告中显示)')->setWidth(4)->setMustMark();        $display_option = [            'on'  => ['value' => 1, 'text' => '是', 'color' => 'success'],            'off' => ['value' => 0, 'text' => '否', 'color' => 'danger'],        ];        $form->switch('is_display', '显示状态')->states($display_option)->default($ad_info->is_display)->setMustMark();        if ($info->subsite_id == 0) {            $subsites = Subsite::where(['effective' => 1])->orderBy('order', 'asc')->get()->pluck('sitename', 'id');        } else {            $subsites      = Subsite::where([['effective', '=', 1], ['id', '<>', $info->subsite_id]])->orderBy('order', 'asc')->get()->pluck('sitename', 'id')->toArray();            $subsites['0'] = '总站';            $subsites      = collect($subsites);        }        if ($subsites->isNotEmpty() && $info->subsite_id == 0) {            $relations = SubsiteAd::where(['ad_id' => $id])->get()->pluck('subsite_id')->toArray();            $form->multipleSelect('relate_subsites', '同步分站')->options($subsites)->default($relations);        } else {            $form->hidden('relate_subsites');        }        $form->ignore(['relate_subsites']);        $cate_option = AdCategory::all()->pluck('category_name', 'id');        $form->select('category_id', '广告位')->options($cate_option)->default($ad_info->category_id)->setWidth(4)->attribute(['id' => 'sub_category'])->setMustMark();        $form->number('list_order', '显示顺序')->default($ad_info->list_order)->min(0)->help('(数字越大越靠前)')->setMustMark();        $form->date('started_at', '开始日期')            ->format('YYYY-MM-DD')            ->default($ad_info->started_at)            ->rules('required|date', ['required' => '开始日期不能为空。', 'date' => '开始日期格式不正确。'])            ->help('(设置广告起始日期,格式yyyy-mm-dd,留空为不限制起始日期)');        $form->date('ended_at', '结束日期')            ->format('YYYY-MM-DD')            ->default($ad_info->ended_at)            ->rules('required|date', ['required' => '结束日期不能为空。', 'date' => '结束日期格式不正确。'])            ->help('(设置广告结束日期,格式yyyy-mm-dd,留空为不限制结束日期)');        $form->textarea('note', '备注')->default($ad_info->note);        $form->html("<div id='change_field'></div>")->plain();        $form->hidden('alias')->value($ad_info->alias)->attribute('id', 'alias');        $form->hidden('theme')->value($ad_info->theme);        $form->hidden('type_id')->value($ad_info->type_id)->attribute('id', 'type_id');        $form->hidden('id')->value($ad_info->id);        $template = new Template();        $template->setTemplatesId("text_div");        if ($ad_info->type_id == '1') {            $template->text('content', '文字内容')->default($ad_info->content)->help('(文字广告的显示内容)')->setMustMark();            $template->url('url', '文字链接')->default($ad_info->url)->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com)');            $template->color('text_color', '文字颜色')->default($ad_info->text_color)->setMustMark();        } else {            $template->text('content', '文字内容')->help('(文字广告的显示内容)')->setMustMark();            $template->url('url', '文字链接')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com)');            $template->color('text_color', '文字颜色')->setMustMark();        }        $template->setTemplatesId("image_div");        if ($ad_info->type_id == '2') {            $img_file = null;            $img_url  = null;            if (preg_match('/^http/', $ad_info->content)) {                $img_url = $ad_info->content;            } else {                $img_file = $ad_info->content;            }            $template->image('img_file', '本地上传')->uniqueName()->help('(允许格式为gif/jpg/bmp/png,文件大小1000KB)')->value($img_file)->setMustMark()->options(['layoutTemplates' => ['actionDelete' => '']]);            $template->text('img_url', '或图片地址')->default($img_url)->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com/img/baidu_logo.gif)');            $template->url('url', '图片链接')->default($ad_info->url)->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com)');            $template->text('target', 'target')->default($ad_info->target)->help('(请输入_self等,默认_blank)');            $template->text('explain', '图片说明文字')->default($ad_info->explain);            $template->number('uid', '会员UID')->default($ad_info->uid)->min(0)->help('(设置会员UID后,当鼠标移动到图片上将会显示相关的职位和企业信息)');        } else {            $template->image('img_file', '本地上传')->uniqueName()->setWidth(3)->help('(允许格式为gif/jpg/bmp/png,文件大小1000KB)')->setMustMark()->options(['layoutTemplates' => ['actionDelete' => '']]);            $template->text('img_url', '或图片地址')->help('(请输入包含http://或https://的完整链接,如http://www.baidu.com/img/baidu_logo.gif)');            $template->url('url', '图片链接')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com)');            $template->text('explain', '图片说明文字');            $template->number('uid', '会员UID')->min(0)->help('(设置会员UID后,当鼠标移动到图片上将会显示相关的职位和企业信息)');        }        $template->setTemplatesId("code_div");        if ($ad_info->type_id == '3') {            $template->textarea('content', '代码')->default($ad_info->content)->rows(1)->help('(请直接输入需要展现的广告代码)')->setMustMark();        } else {            $template->textarea('content', '代码')->rows(1)->help('(请直接输入需要展现的广告代码)')->setMustMark();        }        $template->setTemplatesId("flash_div");        if ($ad_info->type_id == '4') {            $flash_file = null;            $flash_url  = null;            if (preg_match('/^images\//', $ad_info->content)) {                $flash_file = $ad_info->content;            } else {                $flash_url = $ad_info->content;            }            $template->image('content', '本地上传')->default($flash_file)->uniqueName()->setWidth(3)->help('(允许格式为:swf,文件大小:1000KB)')->setMustMark()->options(['layoutTemplates' => ['actionDelete' => '']]);            $template->url('url', '或者Flash地址')->default($flash_url)->help('(请输入包含http://或https://的完整链接,如: http://www.baidu.com/123.swf)');        } else {            $template->file('content', '本地上传')->uniqueName()->setWidth(3)->help('(允许格式为:swf,文件大小:1000KB)')->setMustMark()->options(['layoutTemplates' => ['actionDelete' => '']]);            $template->url('url', '或者Flash地址')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com/123.swf)');        }        $template->setTemplatesId("vedio_div");        if ($ad_info->type_id == '5') {            $vedio_file = null;            $vedio_url  = null;            if (preg_match('/^images\//', $ad_info->content)) {                $vedio_file = $ad_info->content;            } else {                $vedio_url = $ad_info->content;            }            $template->file('content', '本地上传')->default($vedio_file)->uniqueName()->setWidth(3)->help('(允许格式为swf/flv/f4v,文件大小5000KB,大文件FTP上传)')->setMustMark()->options(['layoutTemplates' => ['actionDelete' => '']]);            $template->url('url', '或者视频地址')->default($vedio_url)->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com/123.swf)');        } else {            $template->file('content', '本地上传')->uniqueName()->setWidth(3)->help('(允许格式为swf/flv/f4v,文件大小5000KB,大文件FTP上传)')->setMustMark()->options(['layoutTemplates' => ['actionDelete' => '']]);            $template->url('url', '或者视频地址')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com/123.swf)');        }        $form->disableReset();        $data['custom_form'] = $form->render();        $data['temp']        = $template->render();        $data['ad_info']     = $ad_info;        return $content            ->header('广告')            ->description(' ')            ->body(view('admin.content.ad_edit')->with($data));    }    public function update(Request $request)    {        $ad      = Ad::findOrFail($request->input('id'));        $rules   = [            'title'       => 'required|max:50',            'is_display'  => 'required',            'category_id' => 'required',            'list_order'  => 'required|max:10',            'note'        => 'max:80',        ];        $message = [            'title.required'       => '广告标题不能为空。',            'title.max'            => '广告标题长度不能超过50。',            'is_display.required'  => '请选择显示状态。',            'category_id.required' => '请选择广告位。',            'list_order.required'  => '显示顺序不能为空。',            'list_order.max'       => '显示顺序长度不能大于10。',            'note.max'             => '备注长度不能超过80。',        ];        if ($request->input('started_at')) {            $rules['started_at']        = 'date';            $message['started_at.date'] = '开始日期格式不正确。';        }        if ($request->input('ended_at')) {            $rules['ended_at']                  = 'date|after_or_equal:started_at';            $message['ended_at.date']           = '结束日期格式不正确。';            $message['ended_at.after_or_equal'] = '结束日期不能早于开始日期。';        }        $type_id = $request->input('type_id');        if ($type_id == '1') {            $rules['content']               = 'required';            $rules['text_color']            = 'required';            $message['content.required']    = '文字内容不能为空。';            $message['text_color.required'] = '文字颜色不能为空。';        } else if ($type_id == '2') {            $rules['img_file']         = 'mimes:gif,jpeg,bmp,png|max:1024';            $rules['explain']          = 'max:80';            $rules['uid']              = 'nullable|numeric';            $message['img_file.mimes'] = '本地上传格式不正确。';            $message['img_file.max']   = '本地上传文件大小不能超过1M。';            $message['explain.max']    = '图片说明文字长度不能大于80。';            /*$message['uid.required']                 = 'UID不能为空。';*/            $message['uid.numeric'] = 'UID只能填写数字。';        } else if ($type_id == '3') {            $rules['content']            = 'required';            $message['content.required'] = '代码不能为空。';        } else if ($type_id == '4') {            $rules['content']         = 'mimes:swf';            $message['content.mimes'] = '本地上传格式不正确。';        } else if ($type_id == '5') {            $rules['content']         = 'mimes:swf,flv,f4v';            $message['content.mimes'] = '本地上传格式不正确。';        }        $request->validate($rules, $message);        $time       = date('Y-m-d H:i:s', time());        $is_display = $request->input('is_display') == 'on' ? 1 : 0;        $started_at = $request->input('started_at') ? strtotime($request->input('started_at')) : 0;        $ended_at   = $request->input('ended_at') ? strtotime($request->input('ended_at')) : 0;        $type_id    = $request->input('type_id');        $theme      = $request->input('theme') ? $request->input('theme') : 'default';        $note       = $request->input('note') ? $request->input('note') : '';        $ad->theme       = $theme;        $ad->alias       = $request->input('alias');        $ad->is_display  = $request->input('is_display') == 'on' ? 1 : 0;        $ad->category_id = $request->input('category_id');        $ad->type_id     = $type_id;        $ad->title       = $request->input('title');        $ad->note        = $request->input('note') ? $request->input('note') : '';        $ad->list_order  = $request->input('list_order');        $ad->started_at  = $request->input('started_at') ? strtotime($request->input('started_at')) : 0;        $ad->ended_at    = $request->input('ended_at') ? strtotime($request->input('ended_at')) : 0;        $ad->updated_at  = $time;        if ($type_id == '1') {   //文字广告            $ad->content    = $request->input('content');            $ad->url        = $request->input('url') ? $request->input('url') : '';            $ad->text_color = $request->input('text_color') ? $request->input('text_color') : '#000000';            $ad->uid        = 0;        } else if ($type_id == '2') {  //图片广告            $img_file = $request->input('img_file');            $img_url  = $request->input('img_url');            $url      = $request->input('url') ? $request->input('url') : '';            $target   = $request->input('target') ? $request->input('target') : '_blank';            $explain  = $request->input('explain');            $uid      = $request->input('uid');            $up_file  = null;            if ($request->hasFile('img_file')) {                $file    = 'img_file';                $up_file = $request->$file->store(config('admin.upload.directory.image'), config('admin.upload.disk'));            }            $content = $up_file ? $up_file : $img_url;            if ($content) {                $ad->content = $content;            }            $ad->url        = $url;            $ad->target     = $target;            $ad->text_color = '#000000';            $ad->uid        = $uid ? $uid : 0;            $ad->explain    = $explain;        } else if ($type_id == '3') {    //代码广告            $content = $request->input('content') ? $request->input('content') : 0;            if ($content) {                $ad->content = $content;            }            $ad->uid        = 0;            $ad->text_color = '#000000';            $ad->url        = '';        } else if ($type_id == '4' || $type_id == '5') {  //flash广告 、视频广告            $url     = $request->input('url') ? $request->input('url') : '';            $up_file = null;            if ($request->hasFile('content')) {                $file    = 'content';                $up_file = $request->$file->store(config('admin.upload.directory.file'), config('admin.upload.disk'));            }            $content = $up_file ? $up_file : $url;            if ($content) {                $ad->content = $content;            }            $ad->url        = '';            $ad->uid        = 0;            $ad->text_color = '#000000';        }        $set_data = [];        $subsites = $request->input('relate_subsites');        if (empty($subsites)) {            $subsites = [];        }        $subsites = array_merge([$ad->subsite_id], $subsites);        foreach ($subsites as $k => $v) {            if ($v !== null) {                $set_data[] = [                    'ad_id'      => $ad->id,                    'subsite_id' => $v,                ];            }        }        if ($ad->save()) {            if ($set_data) {                SubsiteAd::where('ad_id', $ad->id)->delete();                SubsiteAd::insert($set_data);            }            admin_toastr(trans('admin.save_succeeded'), 'success');            return redirect(admin_base_path() . '/content/ad/index');        } else {            throw new \Exception(trans('admin.save_failed'));        }    }    public function updates(Request $request)    {        $rules   = [            'title'       => 'required|max:50',            'is_display'  => 'required',            'category_id' => 'required',            'list_order'  => 'required|max:10',            'note'        => 'max:80',        ];        $message = [            'title.required'       => '广告标题不能为空。',            'title.max'            => '广告标题长度不能超过50。',            'is_display.required'  => '请选择显示状态。',            'category_id.required' => '请选择广告位。',            'list_order.required'  => '显示顺序不能为空。',            'list_order.max'       => '显示顺序长度不能大于10。',            'note.max'             => '备注长度不能超过80。',        ];        if ($request->input('started_at')) {            $rules['started_at']        = 'date';            $message['started_at.date'] = '开始日期格式不正确。';        }        if ($request->input('ended_at')) {            $rules['ended_at']                  = 'date|after_or_equal:started_at';            $message['ended_at.date']           = '结束日期格式不正确。';            $message['ended_at.after_or_equal'] = '结束日期不能早于开始日期。';        }        $type_id = $request->input('type_id');        if ($type_id == '1') {            $rules['content']               = 'required';            $rules['text_color']            = 'required';            $message['content.required']    = '文字内容不能为空。';            $message['text_color.required'] = '文字颜色不能为空。';        } else if ($type_id == '2') {            $rules['img_file']                    = 'required_without:img_url|mimes:gif,jpeg,bmp,png';            $rules['img_url']                     = 'required_without:img_file';            $rules['explain']                     = 'max:80';            $rules['uid']                         = 'required|numeric';            $message['img_file.required_without'] = '本地上传或者图片地址填写一项。';            $message['img_file.mimes']            = '本地上传格式不正确。';            $message['img_url.required_without']  = '本地上传或者图片地址填写一项。';            $message['explain.max']               = '图片说明文字长度不能大于80。';            $message['uid.required']              = 'UID不能为空。';            $message['uid.numeric']               = 'UID只能填写数字。';        } else if ($type_id == '3') {            $rules['content']            = 'required';            $message['content.required'] = '代码不能为空。';        } else if ($type_id == '4') {            $rules['content']                    = 'required_without:url|mimes:swf';            $rules['url']                        = 'required_without:content';            $message['content.required_without'] = '本地上传或者Flash地址填写一项。';            $message['content.mimes']            = '本地上传格式不正确。';            $message['url.required_without']     = '本地上传或者Flash地址填写一项。';        } else if ($type_id == '5') {            $rules['content']                    = 'required_without:url|mimes:swf,flv,f4v';            $rules['url']                        = 'required_without:content';            $message['content.required_without'] = '本地上传或者填写视频地址填写一项。';            $message['content.mimes']            = '本地上传格式不正确。';            $message['url.required_without']     = '本地上传或者填写视频地址填写一项。';        }        $request->validate($rules, $message);        $is_display = $request->input('is_display') == 'on' ? 1 : 0;        $time       = date('Y-m-d H:i:s', time());        $started_at = $request->input('started_at') ? strtotime($request->input('started_at')) : 0;        $ended_at   = $request->input('ended_at') ? strtotime($request->input('ended_at')) : 0;        $type_id    = $request->input('type_id');        $theme      = $request->input('theme') ? $request->input('theme') : 'default';        $note       = $request->input('note') ? $request->input('note') : '';        $form_data = [            'theme'       => $theme,            'alias'       => $request->input('alias'),            'is_display'  => $is_display,            'category_id' => $request->input('category_id'),            'type_id'     => $type_id,            'title'       => $request->input('title'),            'note'        => $note,            'list_order'  => $request->input('list_order'),            'started_at'  => $started_at,            'ended_at'    => $ended_at,            'updated_at'  => $time,        ];        if ($type_id == '1') {            //文字广告            $form_data['content']    = $request->input('content');            $form_data['url']        = $request->input('url');            $form_data['text_color'] = $request->input('text_color') ? $request->input('text_color') : '#000000';            $form_data['uid']        = 0;        } else if ($type_id == '2') {            //图片广告            $img_file = $request->input('img_file');            $img_url  = $request->input('img_url');            $url      = $request->input('url');            $explain  = $request->input('explain');            $uid      = $request->input('uid');            $up_file  = null;            if ($request->hasFile('img_file')) {                $file    = 'img_file';                $up_file = $request->$file->store(config('admin.upload.directory.image'), config('admin.upload.disk'));            }            $content                 = $up_file ? $up_file : $img_url;            $form_data['content']    = $content;            $form_data['url']        = $url;            $form_data['text_color'] = '#000000';            $form_data['uid']        = $uid;            $form_data['explain']    = $explain;        } else if ($type_id == '3') {            //代码广告            $content                 = $request->input('content') ? $request->input('content') : 0;            $form_data['content']    = $content;            $form_data['uid']        = 0;            $form_data['text_color'] = '#000000';            $form_data['url']        = '';        } else if ($type_id == '4' || $type_id == '5') {            //flash广告 、视频广告            $url     = $request->input('url') ? $request->input('url') : '';            $up_file = null;            if ($request->hasFile('content')) {                $file    = 'content';                $up_file = $request->$file->store(config('admin.upload.directory.file'), config('admin.upload.disk'));            }            $content                 = $up_file ? $up_file : $url;            $form_data['content']    = $content;            $form_data['url']        = '';            $form_data['uid']        = 0;            $form_data['text_color'] = '#000000';        }        if (Ad::where(['id' => $request->input('id')])->update($form_data)) {            admin_toastr(trans('admin.save_succeeded'), 'success');            return redirect(admin_base_path() . '/content/ad/index');        } else {            throw new \Exception(trans('admin.save_failed'));        }    }    /**     * Create interface.     *     * @param Content $content     * @return Content     */    public function create(Content $content)    {        $form = new ValueForm();        $form->action(route('ad.index'));        $form->text('title', '广告标题')->help('(区分不同广告条目,并不在广告中显示)')->setWidth(4)->setMustMark();        $display_option = [            'on'  => ['value' => 1, 'text' => '是', 'color' => 'success'],            'off' => ['value' => 0, 'text' => '否', 'color' => 'danger'],        ];        $form->switch('is_display', '显示状态')->states($display_option)->default('1')->setMustMark();        if (get_subsite_id() == 0) {            $subsites = Subsite::where(['effective' => 1])->orderBy('order', 'asc')->get()->pluck('sitename', 'id');        } else {            $subsites      = Subsite::where([['effective', '=', 1], ['id', '<>', get_subsite_id()]])->orderBy('order', 'asc')->get()->pluck('sitename', 'id')->toArray();            $subsites['0'] = '总站';            $subsites      = collect($subsites);        }        if ($subsites->isNotEmpty() && get_subsite_id() == 0) {            $form->multipleSelect('relate_subsites', '同步分站')->options($subsites);        } else {            $form->hidden('relate_subsites');        }        $form->ignore(['relate_subsites']);        $form->hidden('subsite_id')->value(get_subsite_id());        $cate_option = AdCategory::all()->pluck('category_name', 'id');        $form->select('category_id', '广告位')->options($cate_option)            ->rules('required', ['required' => '请选择广告位。'])            ->setWidth(4)->attribute(['id' => 'sub_category'])->setMustMark();        $form->number('list_order', '显示顺序')->min(0)->default(0)->help('(数字越大越靠前)')->setMustMark();        $form->date('started_at', '开始日期')            ->format('YYYY-MM-DD')            ->rules('required|date', ['required' => '开始日期不能为空。', 'date' => '开始日期格式不正确。'])            ->help('(设置广告起始日期,格式yyyy-mm-dd,留空为不限制起始日期)');        $form->date('ended_at', '结束日期')            ->format('YYYY-MM-DD')            ->rules('required|date', ['required' => '结束日期不能为空。', 'date' => '结束日期格式不正确。'])            ->help('(设置广告结束日期,格式yyyy-mm-dd,留空为不限制结束日期)');        $form->textarea('note', '备注');        $form->html("<div id='change_field'></div>")->plain();        $form->hidden('alias')->attribute('id', 'alias');        $form->hidden('theme')->value('default');        $form->hidden('type_id')->attribute('id', 'type_id');        $template = new Template();        $template->setTemplatesId("text_div");        $template->text('content', '文字内容')->help('(文字广告的显示内容)')->setMustMark();        $template->url('url', '文字链接')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com)');        $template->color('text_color', '文字颜色')->default('#000000')->setMustMark();        $template->setTemplatesId("image_div");        $template->image('img_file', '本地上传')->uniqueName()->setWidth(3)->help('(允许格式为gif/jpg/bmp/png,文件大小1000KB)')->setMustMark();        $template->text('img_url', '或图片地址')->help('(如/images/logo.gif 或 http://www.baidu.com/img/baidu_logo.gif)');        $template->url('url', '图片链接')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com)');        $template->text('target', 'target')->help('(请输入_self等,默认_blank)');        $template->text('explain', '图片说明文字');        $template->number('uid', '会员UID')->min(0)->default(0)            ->help('(设置会员UID后,当鼠标移动到图片上将会显示相关的职位和企业信息)')            ->attribute(['maxlength' => '10', 'onkeyup' => 'if(event.keyCode !=37 && event.keyCode != 39) value=value.replace(/\D/g,\'\');', 'onbeforepaste' => "clipboardData.setData('text',clipboardData.getData('text').replace(/\D/g,''))"]);        $template->setTemplatesId("code_div");        $template->textarea('content', '代码')->rows(1)->help('(请直接输入需要展现的广告代码)')->setMustMark();        $template->setTemplatesId("flash_div");        $template->image('content', '本地上传')->uniqueName()->setWidth(3)->help('(允许格式为:swf,文件大小:1000KB)')->setMustMark();        $template->url('url', '或者Flash地址')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com/123.swf)');        $template->setTemplatesId("vedio_div");        $template->image('content', '本地上传')->uniqueName()->setWidth(3)->help('(允许格式为swf/flv/f4v,文件大小5000KB,大文件FTP上传)')->setMustMark();        $template->url('url', '或者视频地址')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com/123.swf)');        $form->disableReset();        $data['custom_form'] = $form->render();        $data['temp']        = $template->render();        return $content            ->header('广告')            ->description(' ')            ->body(view('admin.content.ad')->with($data));    }    public function changeCategory(Request $request)    {        $cate_option = AdCategory::all()->toArray();        return response()->json(['data' => $cate_option, 'status' => '1']);    }    public function store(Request $request)    {        $rules   = [            'title'       => 'required|max:50',            'is_display'  => 'required',            'category_id' => 'required',            'list_order'  => 'required|max:10',            'note'        => 'max:80',        ];        $message = [            'title.required'       => '广告标题不能为空。',            'title.max'            => '广告标题长度不能超过50。',            'is_display.required'  => '请选择显示状态。',            'category_id.required' => '请选择广告位。',            'list_order.required'  => '显示顺序不能为空。',            'list_order.max'       => '显示顺序长度不能大于10。',            'note.max'             => '备注长度不能超过80。',        ];        if ($request->input('started_at')) {            $rules['started_at']        = 'date';            $message['started_at.date'] = '开始日期格式不正确。';        }        if ($request->input('ended_at')) {            $rules['ended_at']                  = 'date|after_or_equal:started_at';            $message['ended_at.date']           = '结束日期格式不正确。';            $message['ended_at.after_or_equal'] = '结束日期不能早于开始日期。';        }        $type_id = $request->input('type_id');        if ($type_id == '1') {            $rules['content']               = 'required';            $rules['text_color']            = 'required';            $message['content.required']    = '文字内容不能为空。';            $message['text_color.required'] = '文字颜色不能为空。';        } else if ($type_id == '2') {            $rules['img_file']                    = 'required_without:img_url|mimes:gif,jpeg,bmp,png|max:1024';            $rules['img_url']                     = 'required_without:img_file';            $rules['explain']                     = 'max:80';            $rules['uid']                         = 'nullable|numeric';            $message['img_file.required_without'] = '本地上传或者图片地址填写一项。';            $message['img_file.mimes']            = '本地上传格式不正确。';            $message['img_file.max']              = '本地上传文件大小不能超过1M。';            $message['img_url.required_without']  = '本地上传或者图片地址填写一项。';            $message['explain.max']               = '图片说明文字长度不能大于80。';            //$message['uid.required']                 = 'UID不能为空。';            $message['uid.numeric'] = 'UID只能填写数字。';        } else if ($type_id == '3') {            $rules['content']            = 'required';            $message['content.required'] = '代码不能为空。';        } else if ($type_id == '4') {            $rules['content']                    = 'required_without:url|mimes:swf';            $rules['url']                        = 'required_without:content';            $message['content.required_without'] = '本地上传或者Flash地址填写一项。';            $message['content.mimes']            = '本地上传格式不正确。';            $message['url.required_without']     = '本地上传或者Flash地址填写一项。';        } else if ($type_id == '5') {            $rules['content']                    = 'required_without:url|mimes:swf,flv,f4v';            $rules['url']                        = 'required_without:content';            $message['content.required_without'] = '本地上传或者填写视频地址填写一项。';            $message['content.mimes']            = '本地上传格式不正确。';            $message['url.required_without']     = '本地上传或者填写视频地址填写一项。';        }        $request->validate($rules, $message);        $is_display = $request->input('is_display') == 'on' ? 1 : 0;        $time       = date('Y-m-d H:i:s', time());        $started_at = $request->input('started_at') ? strtotime($request->input('started_at')) : 0;        $ended_at   = $request->input('ended_at') ? strtotime($request->input('ended_at')) : 0;        $subsite_id = $request->input('subsite_id');        $theme      = $request->input('theme') ? $request->input('theme') : 'default';        $note       = $request->input('note') ? $request->input('note') : '';        $form_data = [            'theme'       => $theme,            'alias'       => $request->input('alias'),            'is_display'  => $is_display,            'category_id' => $request->input('category_id'),            'type_id'     => $type_id,            'title'       => $request->input('title'),            'note'        => $note,            'list_order'  => $request->input('list_order'),            'started_at'  => $started_at,            'ended_at'    => $ended_at,            'subsite_id'  => $subsite_id,            'created_at'  => $time,            'updated_at'  => $time,        ];        if ($type_id == '1') {            //文字广告            $form_data['content']    = $request->input('content');            $form_data['url']        = $request->input('url') ? $request->input('url') : '';            $form_data['text_color'] = $request->input('text_color') ? $request->input('text_color') : '#000000';            $form_data['uid']        = 0;        } else if ($type_id == '2') {            //图片广告            $img_file = $request->input('img_file');            $img_url  = $request->input('img_url');            $url      = $request->input('url') ? $request->input('url') : '';            $target   = $request->input('target') ? $request->input('target') : '_blank';            $explain  = $request->input('explain');            $uid      = $request->input('uid', 0);            $up_file  = null;            if ($request->hasFile('img_file')) {                $file    = 'img_file';                $up_file = $request->$file->store(config('admin.upload.directory.image'), config('admin.upload.disk'));            }            $content                 = $up_file ? $up_file : $img_url;            $form_data['content']    = $content;            $form_data['url']        = $url;            $form_data['target']     = $target;            $form_data['text_color'] = '#000000';            $form_data['uid']        = $uid ? $uid : 0;            $form_data['explain']    = $explain;        } else if ($type_id == '3') {            //代码广告            $content                 = $request->input('content') ? $request->input('content') : 0;            $form_data['content']    = $content;            $form_data['uid']        = 0;            $form_data['text_color'] = '#000000';            $form_data['url']        = '';        } else if ($type_id == '4' || $type_id == '5') {            //flash广告 、视频广告            $url     = $request->input('url') ? $request->input('url') : '';            $up_file = null;            if ($request->hasFile('content')) {                $file    = 'content';                $up_file = $request->$file->store(config('admin.upload.directory.file'), config('admin.upload.disk'));            }            $content                 = $up_file ? $up_file : $url;            $form_data['content']    = $content;            $form_data['url']        = '';            $form_data['uid']        = 0;            $form_data['text_color'] = '#000000';        }        $subsites = $request->input('relate_subsites');        if (empty($subsites)) {            $subsites = [];        }        if ($ad = Ad::create($form_data)) {            $set_data   = [];            $set_data[] = [                'ad_id'      => $ad->id,                'subsite_id' => get_subsite_id(),            ];            if ($subsites) {                foreach ($subsites as $k => $v) {                    if ($v) {                        $set_data[] = [                            'ad_id'      => $ad->id,                            'subsite_id' => $v,                        ];                    }                }            }            if ($set_data) {                SubsiteAd::insert($set_data);            }            admin_toastr(trans('admin.save_succeeded'), 'success');            return redirect(admin_base_path() . '/content/ad/index');        } else {            throw new \Exception(trans('admin.save_failed'));        }    }    /**     * Make a grid builder.     *     * @return Grid     */    protected function grid()    {        $grid = new Grid(new Ad);        $grid->model()->when(get_subsite_id() > 0, function ($query) {            $query->where('subsite_id', get_subsite_id());        })->orderBy('list_order', 'DESC')->orderBy('created_at', 'DESC');        $grid->title('广告标题')->display(function () {            $logo_html = '';            if ($this->type_id == '2') {                //判断图片中是否包含http                if (preg_match('/^http/', $this->content)) {                    $logo_html = '<span class="vtip" title="<img src=\'' . $this->content . '\'  height=120>">                            <img class="avatar small" src="' . $this->content . '" align="absmiddle" style="width: 22px;height: 22px;">                        </span>';                } else {                    $logo_html = '<span class="vtip" title="<img src=\'' . upload_asset($this->content) . '\'  height=120>">                            <img class="avatar small" src="' . upload_asset($this->content) . '" align="absmiddle" style="width: 22px;height: 22px;">                        </span>';                }            }            return $logo_html . $this->title;        })->width(250);        $grid->show_category()->category_name('所属广告位')->width(200);        $grid->type_id('广告类型')->display(function () {            if ($this->type_id == '1') {                return '文字';            } else if ($this->type_id == '2') {                return '图片';            } else if ($this->type_id == '3') {                return '代码';            } else if ($this->type_id == '4') {                return 'Flash';            } else if ($this->type_id == '5') {                return '视频';            }        });        if (get_subsite_open()) {            $grid->subsite_id('所属分站')->display(function () {                $subsites = Cache::get('subsites_list');                if (array_has($subsites, $this->subsite_id)) {                    return $subsites[$this->subsite_id]['sitename'];                }                return '';            });        }        $grid->started_at('开始日期')->display(function () {            if (!$this->started_at) {                return date('Y-m-d', strtotime($this->created_at));            } else {                return $this->started_at;            }        });        $grid->ended_at('到期日期')->display(function () {            if ($this->ended_at > 0 && strtotime($this->ended_at) <= strtotime(date('Y-m-d'))) {                return '<span style="color:#FF6600">已经到期</span>';            } else {                return $this->ended_at ? $this->ended_at : '无限制';            }        });        $grid->is_display('状态')->display(function () {            return $this->is_display ? '正常' : '暂停';        });        $grid->list_order('排序');        //新增按钮        if (Admin::user()->can('content_ad_list_create')) {            $grid->disableCreateButton(false);        }        //批量删除        if (Admin::user()->can('content_ad_list_delete')) {            $grid->tools(function ($tools) {                $tools->batch(function ($batch) {                    $batch->disableDelete(false);                });            });        } else {            $grid->disableRowSelector();        }        $grid->actions(function ($actions) {            if (Admin::user()->can('content_ad_list_edit')) {                if ($actions->row['subsite_id'] == get_subsite_id() || get_subsite_id() == 0) {                    $actions->disableEdit(false);                }            }            if (Admin::user()->can('content_ad_list_delete')) {                if ($actions->row['subsite_id'] == get_subsite_id() || get_subsite_id() == 0) {                    $actions->disableDelete(false);                }            }        });        $grid->filter(function (Filter $filter) {            $filter->disableIdFilter();            $filter->column(2 / 3, function ($filter) {                $display_option = ['' => '不限', '1' => '正常', '0' => '暂停'];                $filter->equal('is_display', '显示状态')->radio($display_option);                $date1 = strtotime(date('Y-m-d', strtotime("+1 day") - 1)) - 1;                $date3 = strtotime(date('Y-m-d', strtotime("+4 day") - 1)) - 1;                $date7 = strtotime(date('Y-m-d', strtotime("+8 day") - 1)) - 1;                $date_option = [                    ''     => '不限',                    $date1 => '已经到期',                    $date3 => '三天内',                    $date7 => '一周内',                ];                $filter->where(function ($query) {                    $ended_at   = "{$this->input}";                    $start      = strtotime(date('Y-m-d', strtotime("+1 day") - 1)) - 1;                    $start_time = 0;                    if ($ended_at > $start) {                        $start_time = strtotime(date('Y-m-d', time())) - 1;                    }                    $query->whereRaw('ended_at > ' . $start_time . ' and ended_at < ' . "{$this->input}");                }, '到期时间', 'ended_at')->radio($date_option);                $subsites = Subsite::where(['effective' => 1])->orderBy('order', 'asc')->get()->pluck('sitename', 'id')->toArray();                if ($subsites) {                    $subsites = ['' => '不限', '0' => '总站'] + $subsites;                    $filter->equal('subsite_id', '所属分站')->select($subsites);                }                $cates   = AdCategory::get(['id', 'category_name'])->toArray();                $pre_arr = ['id' => '', 'category_name' => '不限'];                array_unshift($cates, $pre_arr);                $cates = collect($cates)->pluck('category_name', 'id');                $filter->equal('category_id', '广告位')->select($cates);                $filter->like('title', '广告标题');            });        });        return $grid;    }    public function getCategory(Request $request)    {        $subsite_id = $request->input('q');        $where      = [];        if ($subsite_id === null) {            $where = [];        } else {            $where = ['subsite_id' => $subsite_id];        }        $cates   = AdCategory::where($where)->get(['id', 'category_name'])->toArray();        $pre_arr = ['id' => '', 'category_name' => '不限'];        array_unshift($cates, $pre_arr);        return collect($cates);    }    /**     * Make a show builder.     *     * @param mixed $id     * @return Show     */    protected function detail($id)    {        $show    = new Show(Ad::findOrFail($id));        $ad_info = Ad::findOrFail($id);        $show->id('ID');        $show->title('广告标题');        $show->is_display('显示状态')->as(function ($is_display) {            return $is_display ? '正常' : '暂停';        });        if (get_subsite_open()) {            $show->subsite_id('所属分站')->as(function ($subsite_id) {                if ($subsite_id) {                    $Subsite = Subsite::findOrFail($subsite_id);                    return $Subsite->sitename;                }                return '总站';            });        }        $show->category_id('广告位')->as(function ($category_id) {            $cate_info = AdCategory::where(['id' => $category_id])->first();            if ($cate_info) {                return $cate_info->category_name;            } else {                return ' ';            }        });        $show->list_order('显示顺序');        $show->started_at('开始日期')->as(function ($started_at) {            return $started_at ? $started_at : '无限制';        });        $show->ended_at('结束日期')->as(function ($ended_at) {            return $ended_at ? $ended_at : '无限制';        });        $show->note('备注')->as(function ($note) {            return $note ? $note : ' ';        })->setEscape(false);        if ($ad_info->type_id == '1') {            $show->content('文字内容');            $show->url('文字链接')->as(function ($url) {                return $url ? $url : ' ';            })->setEscape(false);            $show->text_color('文字颜色')->as(function ($text_color) {                $html = '<i style="background-color: ' . $text_color . ';padding: 5px 15px;"></i>';                return $html;            })->setEscape(false);        } else if ($ad_info->type_id == '2') {            $show->content('图片')->image();            $show->url('图片链接')->as(function ($url) {                return $url ? $url : ' ';            })->setEscape(false);            $show->explain('图片说明文字')->as(function ($explain) {                return $explain ? $explain : ' ';            })->setEscape(false);            $show->uid('会员UID');        } else if ($ad_info->type_id == '3') {            $show->content('代码');        } else if ($ad_info->type_id == '4') {            $show->content('Flash地址')->image();        } else if ($ad_info->type_id == '5') {            $show->content('视频地址')->image();        }        $show->created_at('添加时间');        $show->updated_at('更新时间');        return $show;    }    /**     * Make a form builder.     *     * @return Form     */    protected function form()    {        $form = new Form(new Ad);        $form->text('title', '广告标题')->help('(区分不同广告条目,并不在广告中显示)');        $display_option = [            'on'  => ['value' => 1, 'text' => '是', 'color' => 'success'],            'off' => ['value' => 0, 'text' => '否', 'color' => 'danger'],        ];        $form->switch('is_display', '显示状态')->states($display_option)->default('1');        $subsites = array_merge(['0' => '总站'], ['1' => '定海', '2' => '普陀']);        $form->checkbox('subsite_id', '所属分站')->options($subsites)->default('0');        $cate_option = AdCategory::all()->pluck('category_name', 'id');        $form->select('category_id', '广告位')->options($cate_option)->setWidth(3);        $form->number('list_order', '显示顺序')->help('(数字越大越靠前)');        $form->date('started_at', '开始日期')            ->format('YYYY-MM-DD')            ->rules('required|date', ['required' => '开始日期不能为空。', 'date' => '开始日期格式不正确。'])            ->help('(设置广告起始日期,格式yyyy-mm-dd,留空为不限制起始日期)');        $form->date('ended_at', '结束日期')            ->format('YYYY-MM-DD')            ->rules('required|date', ['required' => '结束日期不能为空。', 'date' => '结束日期格式不正确。'])            ->help('(设置广告结束日期,格式yyyy-mm-dd,留空为不限制结束日期)');        $form->textarea('note', '备注');        return $form;    }    public function destroy($id)    {        $ids = [];        if ($id) {            $ids = explode(',', $id);        }        if (get_subsite_id() == 0) {            $filter_id = $id;        } else {            $seletctors = Ad::where(['subsite_id' => get_subsite_id()])->whereIn('id', $ids)->get()->pluck('id')->toarray();            if ($seletctors) {                $filter_id = implode(',', $seletctors);            } else {                $filter_id = '';            }        }        if ($filter_id) {            if ($this->form()->destroy($filter_id)) {                $data = [                    'status'  => true,                    'message' => trans('admin.delete_succeeded'),                ];            } else {                $data = [                    'status'  => false,                    'message' => trans('admin.delete_failed'),                ];            }        } else {            $data = [                'status'  => false,                'message' => '不能删除其它分站数据!',            ];        }        return response()->json($data);    }}
 |