|
|
@@ -270,12 +270,15 @@
|
|
|
</el-form-item>
|
|
|
<el-form-item label="试看时长 (秒)" prop="previewDurationSeconds">
|
|
|
<div>
|
|
|
- <el-input v-model="form.previewDurationSeconds" placeholder="请输入试看时长 (秒)" style="width: 100%" />
|
|
|
- <div style="margin-top: 4px; font-size: 12px; color: #999">温馨提示:输入 -1 表示免费观看</div>
|
|
|
+ <el-input-number v-model="form.previewDurationSeconds" :min="-1" :step="1" controls-position="right" placeholder="请输入试看时长 (秒)" style="width: 100%" />
|
|
|
+ <div style="margin-top: 4px; font-size: 12px; color: #999">温馨提示:输入 -1 表示免费观看,最小值为 -1</div>
|
|
|
</div>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="订阅时效(天)" prop="subscriptionValidHours">
|
|
|
- <el-input v-model="form.subscriptionValidHours" placeholder="请输入订阅时效(天)" />
|
|
|
+ <div>
|
|
|
+ <el-input-number v-model="form.subscriptionValidHours" :min="1" :max="3650" :step="1" controls-position="right" placeholder="请输入订阅时效(天)" style="width: 100%" />
|
|
|
+ <div style="margin-top: 4px; font-size: 12px; color: #999">最大 3650 天(10 年)</div>
|
|
|
+ </div>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="所属标签" prop="categoryTagId">
|
|
|
<el-select v-model="form.categoryTagId" placeholder="请选择所属标签" filterable clearable style="width: 100%">
|
|
|
@@ -752,11 +755,13 @@ const handleOssVideoUrlChange = async (file: any) => {
|
|
|
|
|
|
// ⚠️ 根据核心原则:上传成功后不设置视频URL!
|
|
|
// 视频URL只在两个地方设置:1. 修改页面打开时 2. 异步获取成功时
|
|
|
- const videoUrl = uploadRes.data?.data?.url || uploadRes.data?.data?.ossVideoUrl;
|
|
|
- const ossId = uploadRes.data?.data?.ossId;
|
|
|
- const duration = uploadRes.data?.data?.duration || uploadRes.data?.data?.videoDuration;
|
|
|
- const videoFileName = uploadRes.data?.data?.videoFileName;
|
|
|
- const serviceTagName = uploadRes.data?.data?.serviceTagName;
|
|
|
+ // 拦截器已解包一层:uploadRes 即 R 体,uploadRes.data 就是 SysOssVo(原来多取一层 .data 全为 undefined)
|
|
|
+ const ossData: any = uploadRes.data || {};
|
|
|
+ const videoUrl = ossData.url || ossData.ossVideoUrl;
|
|
|
+ const ossId = ossData.ossId;
|
|
|
+ const duration = ossData.duration || ossData.videoDuration;
|
|
|
+ const videoFileName = ossData.videoFileName;
|
|
|
+ const serviceTagName = ossData.serviceTagName;
|
|
|
|
|
|
// ❌ 删除:不设置视频URL
|
|
|
// form.value.ossVideoUrl = videoUrl || localPreviewUrl;
|
|
|
@@ -772,19 +777,21 @@ const handleOssVideoUrlChange = async (file: any) => {
|
|
|
form.value.serviceTagName = serviceTagName;
|
|
|
}
|
|
|
|
|
|
- if (uploadRes.data?.data?.id) {
|
|
|
- form.value.id = uploadRes.data.data.id;
|
|
|
+ // 后端把新建视频主键放在 ext1 返回(SysOssVo 无 id 字段),取不到会导致确定时不走整体更新、选视频后改的字段(如所属标签)丢失
|
|
|
+ const newVideoId = ossData.id || ossData.ext1;
|
|
|
+ if (newVideoId) {
|
|
|
+ form.value.id = Number(newVideoId);
|
|
|
|
|
|
// ✅ 上传成功后启动轮询(轮询只更新时长和状态,不更新视频URL)
|
|
|
- startPolling(uploadRes.data.data.id);
|
|
|
+ startPolling(form.value.id);
|
|
|
}
|
|
|
|
|
|
let finalDuration = duration && !isNaN(duration) && Number(duration) > 0 ? Math.floor(Number(duration)) : 0;
|
|
|
|
|
|
- if (!isDurationValid(finalDuration) && uploadRes.data?.data?.id) {
|
|
|
+ if (!isDurationValid(finalDuration) && form.value.id) {
|
|
|
try {
|
|
|
const durationRes = await request({
|
|
|
- url: `/physical/videoContent/getVideoDuration/${uploadRes.data.data.id}`,
|
|
|
+ url: `/physical/videoContent/getVideoDuration/${form.value.id}`,
|
|
|
method: 'GET'
|
|
|
});
|
|
|
if (durationRes.data && durationRes.data.success && durationRes.data.duration > 0) {
|