header(admin_trans_label('send_post'))
->body($this->form());
}
protected function form()
{
return Form::make(new SmmPost(), function (Form $form) {
$form->title(admin_trans_label('local_materials'));
$form->action('ssm-post');
$form->disableListButton();
$form->radio('post_type',admin_trans_label('post_type'))
->when([0], function ($step) {
$step->textarea('image_message', '* '.admin_trans_label('post_message'))
->rows(3)
->help(admin_trans_label('post_message_help'))
->placeholder(' ');
$step->multipleImage('image_url', '* '.admin_trans_label('images'))
->retainable()//禁止删OSS图
->sortable() // 可拖动排序
->removable() // 可移除图片
->autoUpload() // 自动上传
->uniqueName()
->limit(4)
->accept('jpg,png')
->help('jpg,png (Max 3M)')
->maxSize(3072);
})
->when([1], function ($step) {
$step->select('youtube_category','* '.admin_trans_label('youtube_category'))->setView('distributor.form_custom.select_hide')->options(SmmUserAccount::getYoutubeCategory())->default(22)->placeholder(' ');
$step->text('yutube_title','* '.admin_trans_label('yutube_title'))->setView('distributor.form_custom.text_hide')->placeholder(' ');
$step->textarea('video_message', '* '.admin_trans_label('post_message'))
->rows(3)
->help(admin_trans_label('post_message_help'))
->placeholder(' ');
$step->file('video_url','* '.admin_trans_label('video'))
->uniqueName()
->autoUpload()
->accept(config('admin.upload.oss_video.accept'))
->maxSize(20480)
->chunked()
->help('mp4 (Max 20M)')
->removable();
//->chunked()
})
->options([ 0=>admin_trans_label('graphic'), 1=>admin_trans_label('videos')])->default(0)->required();
//当前时间
$now = Carbon::now()->format('Y-m-d H:i:s');
$form->datetime('send_time', admin_trans_label('send_time'))->placeholder(' ')->default($now)->required();
$rootAccounts = SmmUserAccount::getUserAccounts();
$listBoxOptions = [];
foreach ($rootAccounts as $account) {
if (SmmPostLog::getPostQuota($account->getParent->name) > 0) {
//限额大于0才显示
$listBoxOptions[$account->id] = $account->name . ' ('.$account->getParent->name.')';
}
}
$form->checkbox('account_ids', admin_trans_label('accountsSelect'))->options($listBoxOptions)->required();
$form->disableViewButton();
$form->disableViewCheck();
$form->disableDeleteButton();
$form->disableEditingCheck();
$form->disableCreatingCheck();
$this->addJs();
// $form->select('youtube_category')->setView('distributor.form_custom.select_hide')->options(SmmUserAccount::getYoutubeCategory())->default(22)->required();
/*
$form->multipleSteps()
->remember()
->width('950px')
->add(admin_trans_label('select_local_media'), 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 (Max 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(20480)
->chunked()
->help('mp4 (Max 20M)')
->removable();
//->chunked()
})
->options([ 0=>admin_trans_label('images'), 1=>admin_trans_label('videos')])->default(0);
$this->stepLeaving($step,0);
})
->add(admin_trans_label('choose_platforms'), 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['post_type'])) {
if ($post['account_ids'] == [] || count($post['account_ids']) == 0 || $post['account_ids'] == '' || empty($post['account_ids'][0])) {
return Admin::json()->error(admin_trans_label('choose_account'));
}
if (SmmUserAccount::findYoutubeAccount($post['account_ids'])->count() > 0) {
if (empty($post['yutube_title']) || empty($post['youtube_category'])) {
return Admin::json()->error(admin_trans_label('input_yutube_fields'));
}
$charCount = mb_strlen($post['yutube_title'], 'UTF-8');
if ($charCount > 70) {
return Admin::json()->error(admin_trans_label('yutube_title_limit'));
}
}
$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 (empty($post['message'])) {
return Admin::json()->error(admin_trans_label('fill_post_message'));
}
$messageCount = mb_strlen($post['message'], 'UTF-8');
if ($messageCount > 2000) {
return Admin::json()->error(admin_trans_label('post_message_limit'));
}
if ($this->checkStoragePath($image_video_url) === false) {
return Admin::json()->error(admin_trans_label('check_upload'));
}
if ($post['send_time'] == '' || $post['send_time'] == null) {
return Admin::json()->error(admin_trans_label('select_send_time'));
}
// 從北京時間字符串創建 Carbon 對象
$sendTime = Carbon::createFromFormat('Y-m-d H:i:s', $post['send_time'], 'Asia/Shanghai');
// 轉換為 UTC 時間
$send_time = $sendTime->setTimezone('UTC');
//保存数据
SmmPost::create($post,$send_time,$image_video_url);
// 生成发送记录
$timer = new TimerSsmPost();
$timer->createLog();
return Admin::json()->success(admin_trans_label('operation_successful'))->refresh();
//最后一步
// $data = [
// 'title' => admin_trans_label('operation_successful'),
// 'description' => admin_trans_label('send_post_description'),
// 'continue_publishing' => admin_trans_label('continue_publishing'),
// ];
// return view('distributor.form_custom.completion-page', $data);
}
}
/**
* 上传图片到本地
*/
public function upload() {
try {
//保存到本地
$disk = $this->disk('local');
// 判断是否是删除文件请求
if ($this->isDeleteRequest()) {
// 删除文件并响应
return $this->deleteFileAndResponse($disk);
}
// 获取上传的文件
$file = $this->file();
$dir = 'ssm/'.getDistributorId();
$newName = md5(uniqid() . mt_rand()) .'.'.$file->getClientOriginalExtension();
//保存在本地
$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;
}
public function addJs()
{
Admin::script(
<< $(id).toggle(false));
} else {
$(this).closest('.vs-checkbox-con').hide();
// 可选择取消选中状态
$(this).prop('checked', false);
}
}
});
}
var changeCount = 0
$('input[name="post_type"]').on('change', function() {
changeCount++;
console.log(changeCount);
if (changeCount > 2) {
// 获取当前选中的 post_type 值
var postType = $(this).val();
hideYouTubeAccount(postType);
} else {
hideYouTubeAccount(0);
}
});
// 定义需要控制的表单元素ID
const youtubeElements = ['#select_hide_youtube_category', '#text_hide_yutube_title'];
// 检查是否包含YouTube账号的函数
function checkYouTubeSelection() {
let hasYouTube = false;
// 遍历所有选中的复选框
$('input[name="account_ids[]"]:checked').each(function() {
// 获取父容器内的账号名称文本
const labelText = $(this).closest('.vs-checkbox-con').find('span:last').text().trim();
if (labelText.includes('YouTube')) {
hasYouTube = true;
return false; // 发现后提前终止循环
}
});
// 统一控制元素的显隐
youtubeElements.forEach(id => $(id).toggle(hasYouTube));
}
// 绑定所有账号复选框的change事件
$('input[name="account_ids[]"]').change(checkYouTubeSelection);
// 初始化执行一次
checkYouTubeSelection();
JS
);
}
}