chore: 移除项目内无用代码(28 文件)
- 清理任务面板/SPA 化改造遗留的未使用变量与函数(模板管理配套 6 函数、 payloadForDisplay/showTip/hasRunning/schedulePoll/removeMatchedRowLocally 等 30+ 处) - 清理未使用 import(getBrandTemplateXlsxUrl/uploadTempFileToJava/getProductRiskTasksBatch 等) - useTaskProgressLoop 改为仅类型导入;progress/task-request 缓存未用参数精简 - DeleteBrandRunService 删除永不执行的 taskItems 死分支 - 全量 vue-tsc(含 --noUnusedLocals/--noUnusedParameters)0 错误;648 测试全过
This commit is contained in:
@@ -91,7 +91,7 @@
|
||||
:source-url="currentWorkspace.sceneAsset.sourceUrl" :loading="currentWorkspace.sceneAsset.uploading"
|
||||
allow-url compact action-label="上传场景图" selected-label="场景图" url-label="场景图链接" url-placeholder="也可以粘贴场景图链接"
|
||||
@select="(file) => setAsset(activeTab, 'sceneAsset', file)"
|
||||
@url-change="(url) => setAssetUrl(activeTab, 'sceneAsset', url, 'image/*')" preview-clickable
|
||||
@url-change="(url) => setAssetUrl(activeTab, 'sceneAsset', url)" preview-clickable
|
||||
@preview="openImagePreview" @clear="clearAsset(activeTab, 'sceneAsset')" />
|
||||
</AiSectionCard>
|
||||
</div>
|
||||
@@ -190,7 +190,7 @@
|
||||
:source-url="currentWorkspace.modelAsset.sourceUrl" :loading="currentWorkspace.modelAsset.uploading"
|
||||
allow-url compact preview-clickable action-label="上传模特图" selected-label="模特图" url-label="模特图链接"
|
||||
url-placeholder="也可以粘贴模特图链接" @select="(file) => setAsset(activeTab, 'modelAsset', file)"
|
||||
@url-change="(url) => setAssetUrl(activeTab, 'modelAsset', url, 'image/*')" @preview="openImagePreview"
|
||||
@url-change="(url) => setAssetUrl(activeTab, 'modelAsset', url)" @preview="openImagePreview"
|
||||
@clear="clearAsset(activeTab, 'modelAsset')" />
|
||||
</AiSectionCard>
|
||||
|
||||
@@ -277,7 +277,7 @@
|
||||
:source-url="currentWorkspace.speechAsset.sourceUrl" :loading="currentWorkspace.speechAsset.uploading"
|
||||
allow-url compact action-label="上传背景音乐" selected-label="背景音乐" url-label="背景音乐链接"
|
||||
@select="(file) => setAsset(activeTab, 'speechAsset', file)"
|
||||
@url-change="(url) => setAssetUrl(activeTab, 'speechAsset', url, 'audio/*')"
|
||||
@url-change="(url) => setAssetUrl(activeTab, 'speechAsset', url)"
|
||||
@clear="clearAsset(activeTab, 'speechAsset')" />
|
||||
</template>
|
||||
|
||||
@@ -786,7 +786,7 @@ function resolvePreviewKindFromMediaType(mediaType: string): PreviewKind {
|
||||
return 'file'
|
||||
}
|
||||
|
||||
function resolveMediaTypeFromUrl(url: string, accept = ''): MediaType {
|
||||
function resolveMediaTypeFromUrl(url: string): MediaType {
|
||||
const cleanUrl = url.split('?')[0]?.toLowerCase() || ''
|
||||
if (/\.(png|jpe?g|webp|gif|bmp|svg)$/.test(cleanUrl)) return 'image'
|
||||
if (/\.(mp4|mov|webm|m4v|ogg|avi|mkv)$/.test(cleanUrl)) return 'video'
|
||||
@@ -794,10 +794,10 @@ function resolveMediaTypeFromUrl(url: string, accept = ''): MediaType {
|
||||
return 'file'
|
||||
}
|
||||
|
||||
function setAssetUrl(tab: WorkspaceTab, assetKey: AssetKey, url: string, accept = '') {
|
||||
function setAssetUrl(tab: WorkspaceTab, assetKey: AssetKey, url: string) {
|
||||
const target = workspaces[tab][assetKey]
|
||||
const normalizedUrl = (url || '').trim()
|
||||
const mediaType = resolveMediaTypeFromUrl(normalizedUrl, accept)
|
||||
const mediaType = resolveMediaTypeFromUrl(normalizedUrl)
|
||||
target.sourceUrl = normalizedUrl
|
||||
target.previewUrl = normalizedUrl
|
||||
target.fileName = normalizedUrl ? '在线素材' : ''
|
||||
@@ -855,7 +855,7 @@ function setProductAssetUrl(tab: WorkspaceTab, index: number, url: string) {
|
||||
target.sourceUrl = normalizedUrl
|
||||
target.previewUrl = normalizedUrl
|
||||
target.fileName = normalizedUrl ? '在线素材' : ''
|
||||
target.mediaType = resolveMediaTypeFromUrl(normalizedUrl, 'image/*')
|
||||
target.mediaType = resolveMediaTypeFromUrl(normalizedUrl)
|
||||
target.previewKind = resolvePreviewKindFromMediaType(target.mediaType)
|
||||
scheduleDeliveryGridLayout()
|
||||
}
|
||||
@@ -1517,26 +1517,6 @@ function findMediaFileUrl(value: unknown) {
|
||||
]) || findUrlMatching(value, isMediaFileUrl)
|
||||
}
|
||||
|
||||
function resolveWorkflowStatus(value: unknown) {
|
||||
return (findTextByKeys(value, [
|
||||
'execute_status',
|
||||
'executeStatus',
|
||||
'workflow_status',
|
||||
'workflowStatus',
|
||||
'status',
|
||||
]) || '').toUpperCase()
|
||||
}
|
||||
|
||||
function isTerminalWorkflowStatus(status: string) {
|
||||
const normalized = (status || '').toUpperCase()
|
||||
return ['SUCCESS', 'SUCCEEDED', 'COMPLETED', 'DONE', 'FINISHED', 'FAILED', 'FAIL', 'ERROR', 'CANCELED', 'CANCELLED'].includes(normalized)
|
||||
}
|
||||
|
||||
function isFailedWorkflowStatus(status: string) {
|
||||
const normalized = (status || '').toUpperCase()
|
||||
return ['FAILED', 'FAIL', 'ERROR', 'CANCELED', 'CANCELLED'].includes(normalized)
|
||||
}
|
||||
|
||||
function findTextByKeys(value: unknown, keys: string[]): string {
|
||||
if (!value) return ''
|
||||
const normalizedKeys = keys.map((key) => key.toLowerCase())
|
||||
@@ -1751,7 +1731,7 @@ async function synthesizeVoice() {
|
||||
const result = await waitForImageVideoTask(ticket)
|
||||
const audioUrl = findMediaFileUrl(result)
|
||||
if (audioUrl) {
|
||||
setAssetUrl(activeTab.value, 'speechAsset', audioUrl, 'audio/*')
|
||||
setAssetUrl(activeTab.value, 'speechAsset', audioUrl)
|
||||
setVoiceStatus('语音合成完成,已写入最终配音文件', 'success')
|
||||
ElMessage.success('语音合成完成,已写入口播音频链接')
|
||||
} else {
|
||||
@@ -1794,7 +1774,7 @@ async function setVoiceCloneAsset(file: File) {
|
||||
|
||||
function setVoiceCloneUrl(url: string) {
|
||||
const normalizedUrl = (url || '').trim()
|
||||
const mediaType = resolveMediaTypeFromUrl(normalizedUrl, 'audio/*,video/*')
|
||||
const mediaType = resolveMediaTypeFromUrl(normalizedUrl)
|
||||
voiceCloneAsset.sourceUrl = normalizedUrl
|
||||
voiceCloneAsset.previewUrl = normalizedUrl
|
||||
voiceCloneAsset.fileName = normalizedUrl ? '在线克隆素材' : ''
|
||||
|
||||
Reference in New Issue
Block a user