header(admin_trans_label('send_post')) ->body($this->form()); } protected function form() { return Form::make(new SmmPost(), function (Form $form) { $form->title('本地素材发布'); $form->action('ssm-post'); $form->disableListButton(); $form->multipleSteps() ->remember() ->width('950px') ->add('选择本地媒体', function ($step) { $step->radio('send_type',admin_trans_label('send_type')) ->when([1], function ($step) { $step->datetime('send_time', '* '.admin_trans_label('send_time'))->placeholder(' '); }) ->options([ 0=>admin_trans_label('immediate'), 1=>admin_trans_label('timing')])->default(0); $step->radio('post_type',admin_trans_label('media_type')) ->when([0], function ($step) { $step->textarea('image_message', '* '.admin_trans_label('post_message'))->rows(3)->placeholder(' '); $step->multipleImage('image_url', '* '.admin_trans_label('images')) ->retainable()//禁止删OSS图 ->sortable() // 可拖动排序 ->removable() // 可移除图片 ->autoUpload() // 自动上传 ->uniqueName() ->limit(4) ->accept('jpg,png') ->help('图片格式jpg,png,不大于3M') ->maxSize(3072); }) ->when([1], function ($step) { $step->textarea('video_message', '* '.admin_trans_label('post_message'))->rows(3)->placeholder(' '); $step->file('video_url','* '.admin_trans_label('video')) ->uniqueName() ->autoUpload() ->accept(config('admin.upload.oss_video.accept')) ->maxSize(120400) ->removable(); }) ->options([ 0=>admin_trans_label('images'), 1=>admin_trans_label('videos')])->default(0); $this->stepLeaving($step,0); }) ->add('选择传单社媒平台', function ($step) { $rootAccounts = SmmUserAccount::getUserAccounts(); $listBoxOptions = []; foreach ($rootAccounts as $account) { if (SmmPostLog::getPostQuota($account->getParent->name) > 0) { //限额大于0才显示 $listBoxOptions[$account->id] = $account->name . ' ('.$account->getParent->name.')'; } } $step->listbox('account_ids', '* '.admin_trans_label('accountsSelect')) ->options($listBoxOptions); $step->select('youtube_category')->setView('distributor.form_custom.select_hide')->options(SmmUserAccount::getYoutubeCategory())->default(22)->required(); $this->stepLeaving($step,1); }); $this->addJs(); }); } /* * 保存数据 */ public function store() { $post = $_POST; if (isset($post['_file_del_'])) { // 删除上传的文件 header('Content-Type: application/json'); echo json_encode(['status' => true, 'data' => []]); exit; } if (isset($post['upload_column']) && ($post['upload_column'] == 'image_url' || $post['upload_column'] == 'video_url')) { // 上传图片或视频 return $this->upload(); } if (isset($post['ALL_STEPS']) && $post['ALL_STEPS'] == '1') { if ($post['account_ids'] == [] || count($post['account_ids']) == 0 || $post['account_ids'] == '' || empty($post['account_ids'][0])) { return Admin::json()->error('请选择社媒帐号'); } $post_type = $post['post_type']; if ($post_type == 0) { $image_video_url = $post['image_url']; $post['message'] = $post['image_message']; } else { $image_video_url = $post['video_url']; $post['message'] = $post['video_message']; } if ($this->checkStoragePath($image_video_url) === false) { return Admin::json()->error('请检查上传文件是否存在'); } if ($post['send_type'] == 0) { $send_time = Carbon::now(); } else { // 從北京時間字符串創建 Carbon 對象 $sendTime = Carbon::createFromFormat('Y-m-d H:i:s', $post['send_time'], 'Asia/Shanghai'); // 轉換為 UTC 時間 $send_time = $sendTime->setTimezone('UTC'); // $send_time = Carbon::createFromFormat('Y-m-d H:i:s', $post['send_time'])->setTimezone('UTC'); } //保存数据 SmmPost::create($post,$send_time,$image_video_url); // 生成发送记录 $timer = new TimerSsmPost(); $timer->createLog(); //最后一步 $data = [ 'title' => '操作成功', 'description' => '系统已生成发送队列,详情请查看日志。 ', ]; return view('distributor.form_custom.completion-page', $data); } } /** * 上传图片到本地 */ public function upload() { try { // 获取上传的文件 $file = $this->file(); $dir = 'ssm/'.getDistributorId(); $newName = md5(uniqid() . mt_rand()) .'.'.$file->getClientOriginalExtension(); //oss 保存 $disk = $this->disk('oss'); $result = $disk->putFileAs($dir, $file, $newName); //保存到本地 $disk = $this->disk('local'); $result = $disk->putFileAs($dir, $file, $newName); return $result ? $this->responseUploaded($result, $disk->url($result)) : $this->responseErrorMessage(admin_trans_label('upload_failed')); } catch (\Exception $e) { return $this->responseErrorMessage($e->getMessage()); } } /* * 判断路径是否正确 */ public function checkStoragePath ($filePath) { $storagePath = 'ssm/'.getDistributorId(); if (strpos($filePath, $storagePath) === 0) { return true; } return false; } private function stepLeaving($step,$index=0) { $lang = config('app.locale');//当前语言 //JS 验证参数不能为空 if ($index == 0) { $step->leaving(<< item.name === 'post_type' && item.type === 'radio' )?.value; // 仅获取radio类型的send_type值 let sendType = formArray.find(item => item.name === 'send_type' && item.type === 'radio' )?.value; // 验证post_type相关规则 if (postType === '0') { const imageMessage = formArray.find(item => item.name === 'image_message')?.value; const imageUrl = formArray.find(item => item.name === 'image_url')?.value; if (!imageMessage || !imageUrl) { if (lang === 'en') { return 'Post message and images cannot be empty'; } else { return '帖子留言和图片不能为空'; } } //隐藏youtube的帐号 toggleYouTube(true); } else if (postType === '1') { const videoMessage = formArray.find(item => item.name === 'video_message')?.value; const videoUrl = formArray.find(item => item.name === 'video_url')?.value; if (!videoMessage || !videoUrl) { if (lang === 'en') { return 'Post message and video cannot be empty'; } else { return '帖子留言和视频不能为空'; } } toggleYouTube(false); } // 验证send_type规则(仅处理radio类型的send_type) if (sendType === '1') { const sendTime = formArray.find(item => item.name === 'send_time')?.value; if (!sendTime) { if (lang === 'en') { return 'Send time cannot be empty'; } else { return '定时发送时间不能为空'; } } } return ""; } var formArray = args.formArray; rs = validateForm(formArray); if (rs != "") { Dcat.error(rs); return false; } JS); } else { $step->leaving(<< item.name === 'account_ids[]')?.value; if (!accountIds || accountIds.length === 0) { if (lang === 'en') { Dcat.error('Please select accounts'); } else { Dcat.error('请选择社媒帐号'); } return false; } JS); } } public function addJs() { Admin::script( << 0; // 切换目标元素的显示状态 $('#select_hide_youtube_category').toggle(hasYouTube); } var select = $('select[name="account_ids\\[\\]_helper2"]'); var select_lenght = select.children().length; let intervalId = setInterval(() => { var select = $('select[name="account_ids\\[\\]_helper2"]'); // 处理变化的逻辑 if (select_lenght != select.children().length) { checkYouTubeOption(select); } }, 300); JS ); } }