Merge branch 'master' into master-6-9
This commit is contained in:
@@ -92,7 +92,10 @@
|
|||||||
<el-input v-model="formData.title" placeholder="请输入资源标题" />
|
<el-input v-model="formData.title" placeholder="请输入资源标题" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="资源文件" prop="file_url" v-if="!isEdit">
|
<el-form-item label="资源文件" prop="file_url" v-if="!isEdit">
|
||||||
<material-picker v-if="formData.type === 1" v-model="formData.file_url" :limit="1" type="image" />
|
<div v-if="formData.type === 1" class="w-full">
|
||||||
|
<material-picker v-model="formData.file_url" :limit="9" type="image" />
|
||||||
|
<div style="font-size: 12px; color: #909399; margin-top: 4px;">支持批量上传多张图片,一次最多 9 张,每张图片将生成一条独立资源(多张时标题自动追加序号)</div>
|
||||||
|
</div>
|
||||||
<upload v-else-if="formData.type === 2" type="video" direct :multiple="false" :limit="1" :show-progress="true" @success="handleUploadSuccess">
|
<upload v-else-if="formData.type === 2" type="video" direct :multiple="false" :limit="1" :show-progress="true" @success="handleUploadSuccess">
|
||||||
<el-button type="primary">上传视频 (OSS直传)</el-button>
|
<el-button type="primary">上传视频 (OSS直传)</el-button>
|
||||||
</upload>
|
</upload>
|
||||||
@@ -156,6 +159,15 @@ const formData = reactive<any>({
|
|||||||
user_ids: []
|
user_ids: []
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const validateFileUrl = (_rule: any, value: any, callback: any) => {
|
||||||
|
if (Array.isArray(value)) {
|
||||||
|
if (!value.length) return callback(new Error('请上传资源文件'))
|
||||||
|
} else if (!value) {
|
||||||
|
return callback(new Error('请输入或上传文件获取链接'))
|
||||||
|
}
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
|
||||||
const computedRules = computed(() => {
|
const computedRules = computed(() => {
|
||||||
if (isEdit.value) {
|
if (isEdit.value) {
|
||||||
return {
|
return {
|
||||||
@@ -164,7 +176,7 @@ const computedRules = computed(() => {
|
|||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
title: [{ required: true, message: '请输入标题', trigger: 'blur' }],
|
title: [{ required: true, message: '请输入标题', trigger: 'blur' }],
|
||||||
file_url: [{ required: true, message: '请输入或上传文件获取链接', trigger: 'blur' }]
|
file_url: [{ required: true, validator: validateFileUrl, trigger: 'change' }]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -55,34 +55,59 @@ class AssetResourceController extends BaseAdminController
|
|||||||
public function add()
|
public function add()
|
||||||
{
|
{
|
||||||
$params = $this->request->post();
|
$params = $this->request->post();
|
||||||
if (empty($params['type']) || empty($params['title']) || empty($params['file_url'])) {
|
$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('请填写完整的资源信息');
|
return $this->fail('请填写完整的资源信息');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 仅图片支持批量;视频/语音只取首个
|
||||||
|
if ($type != 1) {
|
||||||
|
$fileUrls = [$fileUrls[0]];
|
||||||
|
}
|
||||||
|
|
||||||
|
$multi = count($fileUrls) > 1;
|
||||||
|
|
||||||
Db::startTrans();
|
Db::startTrans();
|
||||||
try {
|
try {
|
||||||
$resource = AssetResource::create([
|
$createdIds = [];
|
||||||
'type' => $params['type'],
|
$index = 0;
|
||||||
'title' => $params['title'],
|
foreach ($fileUrls as $url) {
|
||||||
'file_url' => $params['file_url'],
|
$index++;
|
||||||
'cover_url' => $params['cover_url'] ?? '',
|
$resource = AssetResource::create([
|
||||||
]);
|
'type' => $type,
|
||||||
|
'title' => $multi ? $title . '_' . $index : $title,
|
||||||
// 绑定用户
|
'file_url' => $url,
|
||||||
if (!empty($params['user_ids']) && is_array($params['user_ids'])) {
|
'cover_url' => $params['cover_url'] ?? '',
|
||||||
$userResources = [];
|
]);
|
||||||
foreach ($params['user_ids'] as $userId) {
|
|
||||||
$userResources[] = [
|
// 绑定用户
|
||||||
'user_id' => $userId,
|
if (!empty($params['user_ids']) && is_array($params['user_ids'])) {
|
||||||
'resource_id' => $resource->id,
|
$userResources = [];
|
||||||
'create_time' => time(),
|
foreach ($params['user_ids'] as $userId) {
|
||||||
];
|
$userResources[] = [
|
||||||
|
'user_id' => $userId,
|
||||||
|
'resource_id' => $resource->id,
|
||||||
|
'create_time' => time(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
(new AssetUserResource())->saveAll($userResources);
|
||||||
}
|
}
|
||||||
(new AssetUserResource())->saveAll($userResources);
|
|
||||||
|
$createdIds[] = $resource->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
Db::commit();
|
Db::commit();
|
||||||
return $this->success('添加并分配成功', ['id' => $resource->id]);
|
return $this->success('添加并分配成功', ['ids' => $createdIds]);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
Db::rollback();
|
Db::rollback();
|
||||||
return $this->fail('操作失败: ' . $e->getMessage());
|
return $this->fail('操作失败: ' . $e->getMessage());
|
||||||
|
|||||||
Reference in New Issue
Block a user