From f36fc5630cb6f06d9908f0a4c17a445075b4d4a2 Mon Sep 17 00:00:00 2001 From: ZLI263 Date: Mon, 6 Oct 2025 12:19:03 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9F=B3=E9=A2=91=E5=90=88=E6=88=90=EF=BC=8C?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E5=90=88=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/audio-statistics.js | 17 + src/api/face-detect.js | 57 ++ src/api/video-synthesis.js | 35 + src/router/index.js | 15 + src/store/getters.js | 1 + src/store/modules/user.js | 13 +- .../audio-statistics/audio-generation.vue | 456 ++++++++++++- src/views/audio-statistics/index.vue | 64 +- src/views/customer/index.vue | 4 +- src/views/dashboard/data-dashboard.vue | 62 +- src/views/device/index.vue | 4 +- src/views/knowledge/dialogue-mining.vue | 26 +- src/views/knowledge/index.vue | 12 +- src/views/knowledge/knowledge-base.vue | 44 +- src/views/knowledge/terminology.vue | 46 +- src/views/video/face-detect-new.vue | 631 ++++++++++++++++++ src/views/video/face-detect.vue | 631 ++++++++++++++++++ src/views/video/video-synthesis.vue | 451 +++++++++++++ 18 files changed, 2414 insertions(+), 155 deletions(-) create mode 100644 src/api/face-detect.js create mode 100644 src/api/video-synthesis.js create mode 100644 src/views/video/face-detect-new.vue create mode 100644 src/views/video/face-detect.vue create mode 100644 src/views/video/video-synthesis.vue 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) : '-' }} - - - - - + + 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 @@ 挖掘结果 导出结果
- + - + 知识中心 Knowledge Center
- +
- +

对话挖掘

@@ -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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + +