diff --git a/src/api/audio-statistics.js b/src/api/audio-statistics.js
index 82d06c7..bea82c3 100644
--- a/src/api/audio-statistics.js
+++ b/src/api/audio-statistics.js
@@ -63,3 +63,20 @@ export function getTtsRequestLogs(params) {
params
})
}
+
+// TTS音频生成接口
+export function generateTtsAudio(data) {
+ return request({
+ url: '/tts/speech',
+ method: 'post',
+ data
+ })
+}
+
+// 生成临时访问URL接口
+export function generateTempUrl(fileName, expiresInSeconds = 603800) {
+ return request({
+ url: `/minio/temp-url/${fileName}/${expiresInSeconds}`,
+ method: 'get'
+ })
+}
diff --git a/src/api/face-detect.js b/src/api/face-detect.js
new file mode 100644
index 0000000..002d751
--- /dev/null
+++ b/src/api/face-detect.js
@@ -0,0 +1,57 @@
+import request from '@/utils/request'
+
+/**
+ * 人脸检测相关API
+ */
+
+/**
+ * 获取人脸检测列表
+ * @param {Object} params 查询参数
+ * @returns {Promise}
+ */
+export function getFaceDetectList(params) {
+ return request({
+ url: '/face-detect/logs',
+ method: 'get',
+ params
+ })
+}
+
+/**
+ * 检测图片中的人脸信息
+ * @param {String} imageUrl 图片URL
+ * @returns {Promise}
+ */
+export function detectFace(imageUrl) {
+ return request({
+ url: '/face-detect/detect',
+ method: 'post',
+ params: {
+ imageUrl
+ }
+ })
+}
+
+/**
+ * 删除人脸检测记录
+ * @param {String|Number} id 记录ID
+ * @returns {Promise}
+ */
+export function deleteFaceDetect(id) {
+ return request({
+ url: `/face-detect/${id}`,
+ method: 'delete'
+ })
+}
+
+/**
+ * 获取人脸检测详情
+ * @param {String|Number} id 记录ID
+ * @returns {Promise}
+ */
+export function getFaceDetectDetail(id) {
+ return request({
+ url: `/face-detect/${id}`,
+ method: 'get'
+ })
+}
diff --git a/src/api/video-synthesis.js b/src/api/video-synthesis.js
new file mode 100644
index 0000000..9518480
--- /dev/null
+++ b/src/api/video-synthesis.js
@@ -0,0 +1,35 @@
+import request from '@/utils/request'
+
+// 获取视频合成列表
+export function getVideoSynthesisList(query) {
+ return request({
+ url: '/video-synthesis/synthesize',
+ method: 'get',
+ params: query
+ })
+}
+
+// 删除视频合成记录
+export function deleteVideoSynthesis(id) {
+ return request({
+ url: `/video-synthesis/synthesize/${id}`,
+ method: 'delete'
+ })
+}
+
+// 合成视频
+export function createVideoSynthesis(data) {
+ return request({
+ url: '/video-synthesis/synthesize',
+ method: 'post',
+ data: data
+ })
+}
+
+// 查询视频合成状态
+export function getVideoSynthesisStatus(taskId) {
+ return request({
+ url: `/video-synthesis/synthesize/status/${taskId}`,
+ method: 'get'
+ })
+}
diff --git a/src/router/index.js b/src/router/index.js
index 35b4bc8..8cfbed2 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -220,12 +220,27 @@ export const constantRoutes = [
{
path: '/video',
component: Layout,
+ redirect: '/video/index',
+ name: 'VideoRoot',
+ meta: { title: '视频管理', icon: 'el-icon-video-camera' },
children: [
{
path: 'index',
name: 'Video',
component: () => import('@/views/video/index'),
meta: { title: '视频管理', icon: 'el-icon-video-camera' }
+ },
+ {
+ path: 'face-detect',
+ name: 'FaceDetect',
+ component: () => import('@/views/video/face-detect'),
+ meta: { title: '头像检测', icon: 'el-icon-user-solid' }
+ },
+ {
+ path: 'video-synthesis',
+ name: 'VideoSynthesis',
+ component: () => import('@/views/video/video-synthesis'),
+ meta: { title: '视频合成', icon: 'el-icon-video-camera-solid' }
}
]
},
diff --git a/src/store/getters.js b/src/store/getters.js
index 009ddbc..8fb9d64 100644
--- a/src/store/getters.js
+++ b/src/store/getters.js
@@ -4,6 +4,7 @@ const getters = {
token: state => state.user.token,
avatar: state => state.user.avatar,
name: state => state.user.name,
+ phone: state => state.user.phone,
permission_routes: state => state.permission.routes,
cachedViews: state => state.tagsView.cachedViews,
visitedViews: state => state.tagsView.visitedViews
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index 9780877..781f726 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -6,7 +6,8 @@ const getDefaultState = () => {
return {
token: getToken(),
name: '',
- avatar: ''
+ avatar: '',
+ phone: ''
}
}
@@ -24,6 +25,9 @@ const mutations = {
},
SET_AVATAR: (state, avatar) => {
state.avatar = avatar
+ },
+ SET_PHONE: (state, phone) => {
+ state.phone = phone
}
}
@@ -53,10 +57,13 @@ const actions = {
return reject('Verification failed, please Login again.')
}
console.log('getInfo 0812 :', data)
- const { name, avatar } = data
+ const { userName, avatar, phone } = data
+ console.log('getInfo userName 0812 :', userName)
console.log('getInfo avatar 0812 :', avatar)
- commit('SET_NAME', name)
+ console.log('getInfo phone 0812 :', phone)
+ commit('SET_NAME', userName)
commit('SET_AVATAR', avatar)
+ commit('SET_PHONE', phone || '')
resolve(data)
}).catch(error => {
reject(error)
diff --git a/src/views/audio-statistics/audio-generation.vue b/src/views/audio-statistics/audio-generation.vue
index 8b9bbdf..4878c60 100644
--- a/src/views/audio-statistics/audio-generation.vue
+++ b/src/views/audio-statistics/audio-generation.vue
@@ -66,6 +66,10 @@
TTS请求日志列表
+
+
+ 音频生成
+
刷新
@@ -92,6 +96,9 @@
+
+
+
@@ -105,26 +112,30 @@
{{ scope.row.duration ? scope.row.duration.toFixed(2) : '-' }}
-
-
-
- 播放
-
- -
-
-
-
-
+
+
详情
+
+ 播放
+
+
+ 生成播放
+
+ {{ currentRow.creatorName || '-' }}
+ {{ currentRow.creatorPhone || '-' }}
{{ currentRow.model }}
{{ currentRow.voice }}
+ {{ currentRow.audioName || '-' }}
{{ formatFileSize(currentRow.audioSizeBytes) }}
{{ currentRow.duration ? currentRow.duration.toFixed(2) + '秒' : '-' }}
{{ currentRow.processingTimeMs }}ms
- {{ currentRow.createTime }}
+ {{ currentRow.updateTime }}
{{ currentRow.inputText }}
@@ -184,19 +198,192 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 可选参数
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/device/index.vue b/src/views/device/index.vue
index 4bfa2e9..bb25936 100644
--- a/src/views/device/index.vue
+++ b/src/views/device/index.vue
@@ -141,7 +141,7 @@
-
+
-
+
-
+
-
+
@@ -28,7 +28,7 @@
-
+
挖掘分析
重置
@@ -41,7 +41,7 @@
挖掘结果
导出结果
-
+
-
+
-
+
-
+
对话挖掘
@@ -19,11 +19,11 @@
-
+
-
+
知识库
@@ -32,11 +32,11 @@
-
+
-
+
汽车术语库
diff --git a/src/views/knowledge/knowledge-base.vue b/src/views/knowledge/knowledge-base.vue
index e409f87..60016aa 100644
--- a/src/views/knowledge/knowledge-base.vue
+++ b/src/views/knowledge/knowledge-base.vue
@@ -10,7 +10,7 @@
style="width: 250px"
/>
-
+
@@ -19,7 +19,7 @@
-
+
-
+
查询
重置
@@ -77,7 +77,7 @@
-
+
-
+
@@ -110,7 +110,7 @@
-
+
-
+
-
+
已发布
@@ -245,12 +245,12 @@ export default {
this.loading = false
}, 1000)
},
-
+
handleQuery() {
this.queryParams.current = 1
this.getKnowledgeList()
},
-
+
resetQuery() {
this.$refs.queryForm.resetFields()
this.queryParams = {
@@ -262,21 +262,21 @@ export default {
}
this.getKnowledgeList()
},
-
+
handleSelectionChange(selection) {
this.selectedIds = selection.map(item => item.id)
},
-
+
handleSizeChange(val) {
this.queryParams.size = val
this.getKnowledgeList()
},
-
+
handleCurrentChange(val) {
this.queryParams.current = val
this.getKnowledgeList()
},
-
+
getCategoryTag(category) {
const tagMap = {
'销售技巧': 'success',
@@ -286,7 +286,7 @@ export default {
}
return tagMap[category] || 'info'
},
-
+
handleAdd() {
this.isEdit = false
this.knowledgeForm = {
@@ -299,18 +299,18 @@ export default {
}
this.dialogVisible = true
},
-
+
handleEdit(row) {
this.isEdit = true
this.knowledgeForm = { ...row }
this.dialogVisible = true
},
-
+
handleView(row) {
this.currentKnowledge = row
this.viewVisible = true
},
-
+
handleDelete(row) {
this.$confirm('确认删除该知识?', '提示', {
confirmButtonText: '确定',
@@ -321,7 +321,7 @@ export default {
this.getKnowledgeList()
})
},
-
+
handleSubmit() {
this.$refs.knowledgeForm.validate(valid => {
if (valid) {
@@ -331,15 +331,15 @@ export default {
}
})
},
-
+
handleDialogClose() {
this.$refs.knowledgeForm?.resetFields()
},
-
+
handleImport() {
this.$message.info('批量导入功能待实现')
},
-
+
handleExport() {
this.$message.success('导出成功')
}
diff --git a/src/views/knowledge/terminology.vue b/src/views/knowledge/terminology.vue
index dd1ce8e..541643f 100644
--- a/src/views/knowledge/terminology.vue
+++ b/src/views/knowledge/terminology.vue
@@ -10,7 +10,7 @@
style="width: 250px"
/>
-
+
@@ -20,7 +20,7 @@
-
+
@@ -29,7 +29,7 @@
-
+
查询
重置
@@ -78,7 +78,7 @@
-
+
-
+
@@ -135,7 +135,7 @@
-
+
-
+
-
+
@@ -277,12 +277,12 @@ export default {
this.loading = false
}, 1000)
},
-
+
handleQuery() {
this.queryParams.current = 1
this.getTerminologyList()
},
-
+
resetQuery() {
this.$refs.queryForm.resetFields()
this.queryParams = {
@@ -294,21 +294,21 @@ export default {
}
this.getTerminologyList()
},
-
+
handleSelectionChange(selection) {
this.selectedIds = selection.map(item => item.id)
},
-
+
handleSizeChange(val) {
this.queryParams.size = val
this.getTerminologyList()
},
-
+
handleCurrentChange(val) {
this.queryParams.current = val
this.getTerminologyList()
},
-
+
getCategoryTag(category) {
const tagMap = {
'发动机': 'danger',
@@ -319,7 +319,7 @@ export default {
}
return tagMap[category] || 'info'
},
-
+
getLanguageTag(language) {
const tagMap = {
'中文': 'success',
@@ -329,7 +329,7 @@ export default {
}
return tagMap[language] || 'info'
},
-
+
handleAdd() {
this.isEdit = false
this.terminologyForm = {
@@ -344,18 +344,18 @@ export default {
}
this.dialogVisible = true
},
-
+
handleEdit(row) {
this.isEdit = true
this.terminologyForm = { ...row }
this.dialogVisible = true
},
-
+
handleView(row) {
this.currentTerminology = row
this.viewVisible = true
},
-
+
handleDelete(row) {
this.$confirm('确认删除该术语?', '提示', {
confirmButtonText: '确定',
@@ -366,7 +366,7 @@ export default {
this.getTerminologyList()
})
},
-
+
handleSubmit() {
this.$refs.terminologyForm.validate(valid => {
if (valid) {
@@ -376,15 +376,15 @@ export default {
}
})
},
-
+
handleDialogClose() {
this.$refs.terminologyForm?.resetFields()
},
-
+
handleImport() {
this.$message.info('批量导入功能待实现')
},
-
+
handleExport() {
this.$message.success('导出成功')
}
diff --git a/src/views/video/face-detect-new.vue b/src/views/video/face-detect-new.vue
new file mode 100644
index 0000000..37cd690
--- /dev/null
+++ b/src/views/video/face-detect-new.vue
@@ -0,0 +1,631 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+ 重置
+ 头像URL检测
+ 上传并检测
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查看图片
+
+ -
+
+
+
+
+
+
+ {{ scope.row.success ? '成功' : '失败' }}
+
+
+
+
+
+
+
+
+
+ 查看
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/video/face-detect.vue b/src/views/video/face-detect.vue
new file mode 100644
index 0000000..37cd690
--- /dev/null
+++ b/src/views/video/face-detect.vue
@@ -0,0 +1,631 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+ 重置
+ 头像URL检测
+ 上传并检测
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查看图片
+
+ -
+
+
+
+
+
+
+ {{ scope.row.success ? '成功' : '失败' }}
+
+
+
+
+
+
+
+
+
+ 查看
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/video/video-synthesis.vue b/src/views/video/video-synthesis.vue
new file mode 100644
index 0000000..5569e23
--- /dev/null
+++ b/src/views/video/video-synthesis.vue
@@ -0,0 +1,451 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.success ? '成功' : '失败' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查看
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ currentRecord.requestId }}
+
+
+
+
+
+ {{ currentRecord.taskId }}
+
+
+
+
+
+
+
+
+ {{ currentRecord.success ? '成功' : '失败' }}
+
+
+
+
+
+
+ {{ currentRecord.taskStatus }}
+
+
+
+
+
+
+
+
+ {{ currentRecord.videoUrl }}
+
+ -
+
+
+
+
+
+
+
+ {{ currentRecord.videoDuration }}秒
+
+
+
+
+
+ {{ currentRecord.videoRatio }}
+
+
+
+
+
+
+
+ {{ currentRecord.processingTimeMs }}ms
+
+
+
+
+
+ {{ currentRecord.imageId }}
+
+
+
+
+
+
+
+ {{ currentRecord.audioId }}
+
+
+
+
+
+ {{ currentRecord.modelProvider }}
+
+
+
+
+
+
+
+ {{ currentRecord.ownerName }}
+
+
+
+
+
+ {{ currentRecord.ownerPhone }}
+
+
+
+
+
+
+
+ {{ currentRecord.errorMessage }}
+
+
+
+
+
+
+
+ {{ currentRecord.message }}
+
+
+
+
+
+
+
+
+
+
+
+