193 lines
5.9 KiB
PHP
193 lines
5.9 KiB
PHP
<?php
|
|
namespace app\adminapi\controller\asset;
|
|
|
|
use app\adminapi\controller\BaseAdminController;
|
|
use app\common\model\AssetResource;
|
|
use app\common\model\AssetUserResource;
|
|
use think\facade\Db;
|
|
|
|
class AssetResourceController extends BaseAdminController
|
|
{
|
|
/**
|
|
* @notes 资源列表
|
|
*/
|
|
public function lists()
|
|
{
|
|
$pageNo = $this->request->get('page_no', 1);
|
|
$pageSize = $this->request->get('page_size', 15);
|
|
$type = $this->request->get('type');
|
|
$title = $this->request->get('title', '');
|
|
$startTime = $this->request->get('start_time');
|
|
$endTime = $this->request->get('end_time');
|
|
|
|
$where = [];
|
|
if ($type) {
|
|
$where[] = ['type', '=', $type];
|
|
}
|
|
if ($title) {
|
|
$where[] = ['title', 'like', '%' . $title . '%'];
|
|
}
|
|
if ($startTime) {
|
|
$where[] = ['create_time', '>=', strtotime($startTime)];
|
|
}
|
|
if ($endTime) {
|
|
$where[] = ['create_time', '<=', strtotime($endTime) + 86399];
|
|
}
|
|
|
|
$count = AssetResource::where($where)->count();
|
|
$lists = AssetResource::with('users')
|
|
->where($where)
|
|
->order('id', 'desc')
|
|
->page($pageNo, $pageSize)
|
|
->select();
|
|
|
|
return $this->data([
|
|
'count' => $count,
|
|
'lists' => $lists,
|
|
'page_no' => $pageNo,
|
|
'page_size' => $pageSize,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* @notes 添加资源及分配账号
|
|
*/
|
|
public function add()
|
|
{
|
|
$params = $this->request->post();
|
|
$type = $params['type'] ?? 0;
|
|
$title = trim((string)($params['title'] ?? ''));
|
|
|
|
// 兼容单图(字符串)与多图批量上传(数组)
|
|
$fileUrl = $params['file_url'] ?? '';
|
|
if (is_array($fileUrl)) {
|
|
$fileUrls = array_values(array_filter($fileUrl, fn($v) => trim((string)$v) !== ''));
|
|
} else {
|
|
$fileUrls = trim((string)$fileUrl) !== '' ? [$fileUrl] : [];
|
|
}
|
|
|
|
if (empty($type) || $title === '' || empty($fileUrls)) {
|
|
return $this->fail('请填写完整的资源信息');
|
|
}
|
|
|
|
// 仅图片支持批量;视频/语音只取首个
|
|
if ($type != 1) {
|
|
$fileUrls = [$fileUrls[0]];
|
|
}
|
|
|
|
$multi = count($fileUrls) > 1;
|
|
|
|
Db::startTrans();
|
|
try {
|
|
$createdIds = [];
|
|
$index = 0;
|
|
foreach ($fileUrls as $url) {
|
|
$index++;
|
|
$resource = AssetResource::create([
|
|
'type' => $type,
|
|
'title' => $multi ? $title . '_' . $index : $title,
|
|
'file_url' => $url,
|
|
'cover_url' => $params['cover_url'] ?? '',
|
|
]);
|
|
|
|
// 绑定用户
|
|
if (!empty($params['user_ids']) && is_array($params['user_ids'])) {
|
|
$userResources = [];
|
|
foreach ($params['user_ids'] as $userId) {
|
|
$userResources[] = [
|
|
'user_id' => $userId,
|
|
'resource_id' => $resource->id,
|
|
'create_time' => time(),
|
|
];
|
|
}
|
|
(new AssetUserResource())->saveAll($userResources);
|
|
}
|
|
|
|
$createdIds[] = $resource->id;
|
|
}
|
|
|
|
Db::commit();
|
|
return $this->success('添加并分配成功', ['ids' => $createdIds]);
|
|
} catch (\Exception $e) {
|
|
Db::rollback();
|
|
return $this->fail('操作失败: ' . $e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @notes 编辑资源(修改标题、关联账号)
|
|
*/
|
|
public function edit()
|
|
{
|
|
$params = $this->request->post();
|
|
$id = $params['id'] ?? 0;
|
|
if (empty($id)) {
|
|
return $this->fail('缺少参数');
|
|
}
|
|
|
|
$resource = AssetResource::find($id);
|
|
if (!$resource) {
|
|
return $this->fail('资源不存在');
|
|
}
|
|
|
|
Db::startTrans();
|
|
try {
|
|
// 更新标题
|
|
if (!empty($params['title'])) {
|
|
$resource->title = $params['title'];
|
|
$resource->save();
|
|
}
|
|
|
|
// 重新绑定用户(先删后加)
|
|
if (isset($params['user_ids'])) {
|
|
AssetUserResource::where('resource_id', $id)->delete();
|
|
$userIds = is_array($params['user_ids']) ? $params['user_ids'] : [];
|
|
if (!empty($userIds)) {
|
|
$userResources = [];
|
|
foreach ($userIds as $userId) {
|
|
$userResources[] = [
|
|
'user_id' => $userId,
|
|
'resource_id' => $id,
|
|
'create_time' => time(),
|
|
];
|
|
}
|
|
(new AssetUserResource())->saveAll($userResources);
|
|
}
|
|
}
|
|
|
|
Db::commit();
|
|
return $this->success('编辑成功');
|
|
} catch (\Exception $e) {
|
|
Db::rollback();
|
|
return $this->fail('操作失败: ' . $e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @notes 删除资源
|
|
*/
|
|
public function delete()
|
|
{
|
|
$id = $this->request->post('id');
|
|
$ids = is_array($id) ? $id : [$id];
|
|
$ids = array_values(array_unique(array_filter(array_map('intval', $ids), static function (int $item): bool {
|
|
return $item > 0;
|
|
})));
|
|
|
|
if (empty($ids)) {
|
|
return $this->fail('缺少参数');
|
|
}
|
|
|
|
Db::startTrans();
|
|
try {
|
|
AssetResource::destroy($ids);
|
|
AssetUserResource::whereIn('resource_id', $ids)->delete();
|
|
Db::commit();
|
|
return $this->success('删除成功');
|
|
} catch (\Exception $e) {
|
|
Db::rollback();
|
|
return $this->fail('删除失败');
|
|
}
|
|
}
|
|
}
|