Browse Source

调整拍照和录像功能

dev-V1.10.2-temp
wangmingyong@163.com 2 months ago
parent
commit
1f97474d18
  1. 76
      zdxt-web-client/zdxt-efcode-enterprise-app/src/util/w6sMedia.js
  2. 9
      zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/nos/components/NosDetailMaterialsTab.vue

76
zdxt-web-client/zdxt-efcode-enterprise-app/src/util/w6sMedia.js

@ -77,27 +77,40 @@ export const takePhotoWithWaterMark = async ({
await ensureW6sAuth()
console.log('[w6sMedia] 鉴权完成, 准备调起拍照')
return new Promise((resolve, reject) => {
w6s.image.takePhotoAndAddWaterMark({
content,
fontSize,
color,
markDisable: false,
timeEnable,
locationEnable,
success: (res) => {
w6s.image.takePicture({
editable: false,
success: function (res) {
console.log('[w6sMedia] takePhotoAndAddWaterMark success 原始返回:', res)
console.log('[w6sMedia] 返回字段 imageURL:', res?.imageURL, 'key:', res?.key, 'imageInfo:', res?.imageInfo)
resolve(res)
},
fail: (err) => {
console.error('[w6sMedia] takePhotoAndAddWaterMark fail:', err)
fail: function (err) {
console.error('[w6sMedia] takePhotoAndAddWaterMark fail:', err)
reject(err)
},
})
},
});
// w6s.image.takePhotoAndAddWaterMark({
// content,
// fontSize,
// color,
// markDisable: false,
// timeEnable,
// locationEnable,
// success: (res) => {
// console.log('[w6sMedia] takePhotoAndAddWaterMark success 原始返回:', res)
// console.log('[w6sMedia] 返回字段 imageURL:', res?.imageURL, 'key:', res?.key, 'imageInfo:', res?.imageInfo)
// resolve(res)
// },
// fail: (err) => {
// console.error('[w6sMedia] takePhotoAndAddWaterMark fail:', err)
// reject(err)
// },
// })
})
}
// 录制视频
// 录制视频(使用 Cordova 原生 Media Capture API)
export const startVideoRecorder = async ({
duration = 60,
quality = 1, // 0 高清 / 1 一般 / 2 流畅
@ -108,20 +121,33 @@ export const startVideoRecorder = async ({
await ensureW6sAuth()
console.log('[w6sMedia] 录制前鉴权完成, 准备调起录制')
return new Promise((resolve, reject) => {
w6s.video.startVideoRecoder({
duration,
quality,
front,
sync_system_album: syncSystemAlbum,
success: (res) => {
console.log('[w6sMedia] startVideoRecoder success 原始返回:', res)
resolve(res)
if (!navigator?.device?.capture?.captureVideo) {
console.error('[w6sMedia] navigator.device.capture.captureVideo 不可用')
reject(new Error('当前环境不支持视频录制'))
return
}
navigator.device.capture.captureVideo(
(mediaFiles) => {
console.log('[w6sMedia] captureVideo success, mediaFiles:', mediaFiles)
if (mediaFiles && mediaFiles.length > 0) {
const file = mediaFiles[0]
console.log('[w6sMedia] 视频文件: fullPath=', file.fullPath, 'name=', file.name, 'size=', file.size, 'type=', file.type)
resolve({
video_path: file.fullPath,
name: file.name,
size: file.size,
type: file.type || 'video/mp4',
})
} else {
reject(new Error('录制未生成视频文件'))
}
},
fail: (err) => {
console.error('[w6sMedia] startVideoRecoder fail:', err)
reject(err)
(error) => {
console.error('[w6sMedia] captureVideo fail:', error, 'code:', error?.code, 'message:', error?.message)
reject(error)
},
})
{ limit: 1, duration }
)
})
}

9
zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/nos/components/NosDetailMaterialsTab.vue

@ -430,17 +430,18 @@ const onTakePhoto = async (item) => {
// 录制视频
const onRecordVideo = async (item) => {
console.log('[NosDetail] onRecordVideo 开始, item:', item)
try {
const res = await startVideoRecorder({ duration: 60, quality: 1 })
const info = res.info || res
console.log('[NosDetail] 录制返回 res:', res, 'video_path:', res?.video_path)
await pushSdkFileToFileList(item, {
localPath: info.video_path,
localPath: res.video_path,
fileName: `video-${Date.now()}.mp4`,
mimeType: 'video/mp4',
mimeType: res.type || 'video/mp4',
isImage: false,
})
} catch (err) {
console.error('w6s 录制失败', err)
console.error('[NosDetail] w6s 录制失败:', err)
showToast('录制失败或已取消')
}
}

Loading…
Cancel
Save