解决冲突

This commit is contained in:
wangweidong 2026-01-05 09:31:13 +08:00
commit d8d770e29f
356 changed files with 1912 additions and 75 deletions

View File

@ -15,10 +15,18 @@
"navigationStyle": "custom"
}
},
//
{
"path": "pages/recording/recorder",
"style": {
"navigationStyle": "custom"
}
},
//
{
"path": "pages/login/animationpage",
"path": "pages/login/newanimationpage",
"style": {
"navigationStyle": "custom"
}

View File

@ -375,7 +375,7 @@
});
connectWs(); // WebSocket
}
jumpTo(`/pages/login/animationpage`)
jumpTo(`/pages/login/newanimationpage`)
}
</script>

File diff suppressed because it is too large Load Diff

365
pages/recording/recorder.js Normal file
View File

@ -0,0 +1,365 @@
// utils/record.js
// 录屏工具类
class ScreenRecorder {
constructor() {
this.recordModule = null
this.eventModule = null
this.isRecording = false
this.recordTime = 0
this.recordTimer = null
this.eventListeners = new Map()
this.init()
}
// 初始化
init() {
try {
// 获取原生模块
this.recordModule = uni.requireNativePlugin('Record-Module')
this.eventModule = uni.requireNativePlugin('RecordEvent-Module')
console.log('录屏模块初始化成功')
} catch (error) {
console.error('录屏模块初始化失败:', error)
}
}
// 开始录屏
start(options = {}) {
return new Promise((resolve, reject) => {
if (!this.recordModule) {
reject(new Error('录屏模块未初始化'))
return
}
if (this.isRecording) {
reject(new Error('已经在录制中'))
return
}
const defaultOptions = {
width: 720, // 宽度
height: 1280, // 高度
bitRate: 4000000, // 比特率 4Mbps
fileName: null, // 自定义文件名
recordAudio: true // 是否录制音频
}
const recordOptions = { ...defaultOptions, ...options }
console.log('开始录屏,参数:', recordOptions)
this.recordModule.startRecording(recordOptions, (result) => {
console.log('开始录屏结果:', result)
if (result.code === 0 && result.success) {
this.isRecording = true
this.startTimer()
// 触发开始事件
this.emit('start', { options: recordOptions })
resolve({
success: true,
message: '开始录屏成功',
data: result
})
} else {
reject(new Error(result.message || '开始录屏失败'))
}
})
})
}
// 停止录屏
stop() {
return new Promise((resolve, reject) => {
if (!this.recordModule) {
reject(new Error('录屏模块未初始化'))
return
}
if (!this.isRecording) {
resolve({
success: true,
message: '当前没有在录制'
})
return
}
console.log('停止录屏')
this.recordModule.stopRecording((result) => {
console.log('停止录屏结果:', result)
this.isRecording = false
this.stopTimer()
if (result.code === 0 && result.success) {
// 触发停止事件
this.emit('stop', {})
resolve({
success: true,
message: '停止录屏成功',
data: result
})
} else {
reject(new Error(result.message || '停止录屏失败'))
}
})
})
}
// 获取录屏状态
getStatus() {
return new Promise((resolve, reject) => {
if (!this.recordModule) {
reject(new Error('录屏模块未初始化'))
return
}
this.recordModule.getRecordingStatus((result) => {
this.isRecording = result.isRecording
resolve({
isRecording: result.isRecording,
duration: result.duration,
filePath: result.filePath,
...result
})
})
})
}
// 获取录屏文件列表
getFileList() {
return new Promise((resolve, reject) => {
if (!this.recordModule) {
reject(new Error('录屏模块未初始化'))
return
}
this.recordModule.getRecordFiles((result) => {
if (result.code === 0) {
resolve({
success: true,
files: result.files,
count: result.count
})
} else {
reject(new Error(result.message || '获取文件列表失败'))
}
})
})
}
// 删除录屏文件
deleteFile(filePath) {
return new Promise((resolve, reject) => {
if (!this.recordModule) {
reject(new Error('录屏模块未初始化'))
return
}
this.recordModule.deleteRecordFile(filePath, (result) => {
if (result.code === 0 && result.success) {
resolve({
success: true,
message: '删除成功'
})
} else {
reject(new Error(result.message || '删除失败'))
}
})
})
}
// 检查录屏权限
checkPermission() {
return new Promise((resolve, reject) => {
if (!this.recordModule) {
reject(new Error('录屏模块未初始化'))
return
}
this.recordModule.checkPermission((result) => {
resolve({
hasPermission: result.hasPermission,
message: result.message,
...result
})
})
})
}
// 开始事件监听
startListen() {
return new Promise((resolve, reject) => {
if (!this.eventModule) {
reject(new Error('事件模块未初始化'))
return
}
this.eventModule.startListen((result) => {
if (result.code === 0 && result.success) {
// 监听全局事件
uni.$on('recordEvent', this.handleRecordEvent.bind(this))
resolve({
success: true,
message: '开始监听成功'
})
} else {
reject(new Error(result.message || '开始监听失败'))
}
})
})
}
// 停止事件监听
stopListen() {
return new Promise((resolve, reject) => {
if (!this.eventModule) {
reject(new Error('事件模块未初始化'))
return
}
this.eventModule.stopListen((result) => {
if (result.code === 0 && result.success) {
// 移除全局事件监听
uni.$off('recordEvent', this.handleRecordEvent.bind(this))
resolve({
success: true,
message: '停止监听成功'
})
} else {
reject(new Error(result.message || '停止监听失败'))
}
})
})
}
// 处理录屏事件
handleRecordEvent(event) {
console.log('收到录屏事件:', event)
const { type, data } = event
switch (type) {
case 'onRecordEvent':
this.handleNativeEvent(data)
break
}
}
// 处理原生事件
handleNativeEvent(data) {
const { event, filePath } = data
switch (event) {
case 'start':
console.log('录屏开始,文件路径:', filePath)
this.emit('started', { filePath })
break
case 'stop':
console.log('录屏停止,文件路径:', filePath)
this.emit('stopped', { filePath })
break
}
}
// 开始计时器
startTimer() {
this.recordTime = 0
this.recordTimer = setInterval(() => {
this.recordTime++
// 触发计时事件
this.emit('timeupdate', {
currentTime: this.recordTime
})
}, 1000)
}
// 停止计时器
stopTimer() {
if (this.recordTimer) {
clearInterval(this.recordTimer)
this.recordTimer = null
this.recordTime = 0
}
}
// 格式化时间
formatTime(seconds) {
const hours = Math.floor(seconds / 3600)
const minutes = Math.floor((seconds % 3600) / 60)
const secs = seconds % 60
if (hours > 0) {
return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`
} else {
return `${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`
}
}
// 事件监听
on(event, callback) {
if (!this.eventListeners.has(event)) {
this.eventListeners.set(event, [])
}
this.eventListeners.get(event).push(callback)
}
// 取消事件监听
off(event, callback) {
if (this.eventListeners.has(event)) {
const listeners = this.eventListeners.get(event)
const index = listeners.indexOf(callback)
if (index > -1) {
listeners.splice(index, 1)
}
}
}
// 触发事件
emit(event, data) {
if (this.eventListeners.has(event)) {
this.eventListeners.get(event).forEach(callback => {
try {
callback(data)
} catch (error) {
console.error(`执行事件 ${event} 的回调失败:`, error)
}
})
}
}
// 销毁
destroy() {
this.stop()
this.stopListen()
this.eventListeners.clear()
this.recordModule = null
this.eventModule = null
}
}
// 创建单例
let recorderInstance = null
export function getScreenRecorder() {
if (!recorderInstance) {
recorderInstance = new ScreenRecorder()
}
return recorderInstance
}
export default getScreenRecorder

View File

@ -0,0 +1,241 @@
<!-- SimpleRecorder.vue -->
<template>
<view class="simple-recorder">
<!-- 录制按钮 -->
<view
class="simple-record-btn"
:class="{ 'recording': isRecording }"
@click="toggleRecording"
>
<view class="btn-icon">
<view v-if="!isRecording" class="icon-start"></view>
<view v-else class="icon-stop"></view>
</view>
<text class="btn-text">
{{ isRecording ? '停止录制' : '开始录制' }}
</text>
</view>
<!-- 录制时间 -->
<view v-if="isRecording" class="recording-time">
<text>{{ formatTime(recordTime) }}</text>
</view>
<!-- 状态提示 -->
<view v-if="message" class="status-message">
<text>{{ message }}</text>
</view>
</view>
</template>
<script>
import { getScreenRecorder } from './recorder.js'
export default {
data() {
return {
recorder: null,
isRecording: false,
recordTime: 0,
recordTimer: null,
message: ''
}
},
onLoad() {
this.initRecorder()
},
onUnload() {
this.cleanup()
},
methods: {
//
async initRecorder() {
try {
this.recorder = getScreenRecorder()
await this.recorder.startListen()
console.log('录屏器初始化成功')
} catch (error) {
console.error('初始化失败:', error)
this.showMessage('录屏功能初始化失败' + error)
}
},
// /
async toggleRecording() {
if (this.isRecording) {
await this.stopRecord()
} else {
await this.startRecord()
}
},
//
async startRecord() {
try {
this.showMessage('开始录制...')
const options = {
width: 1280,
height: 720,
bitRate: 4000000,
recordAudio: true
}
await this.recorder.start(options)
this.isRecording = true
this.recordTime = 0
this.startTimer()
this.showMessage('录制已开始')
} catch (error) {
console.error('开始录制失败:', error)
this.showMessage('开始录制失败: ' + error.message)
}
},
//
async stopRecord() {
try {
this.showMessage('停止录制...')
await this.recorder.stop()
this.isRecording = false
this.stopTimer()
this.showMessage('录制已停止')
} catch (error) {
console.error('停止录制失败:', error)
this.showMessage('停止录制失败: ' + error.message)
}
},
//
startTimer() {
this.stopTimer()
this.recordTimer = setInterval(() => {
this.recordTime++
}, 1000)
},
stopTimer() {
if (this.recordTimer) {
clearInterval(this.recordTimer)
this.recordTimer = null
}
},
//
formatTime(seconds) {
const minutes = Math.floor(seconds / 60)
const secs = seconds % 60
return `${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`
},
//
showMessage(msg) {
this.message = msg
setTimeout(() => {
this.message = ''
}, 3000)
},
//
cleanup() {
this.stopTimer()
if (this.recorder) {
this.recorder.destroy()
}
}
}
}
</script>
<style>
.simple-recorder {
padding: 100rpx 30rpx;
display: flex;
flex-direction: column;
align-items: center;
min-height: 100vh;
background: #f5f5f5;
}
.simple-record-btn {
width: 200rpx;
height: 200rpx;
border-radius: 50%;
background: #ff3b30;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
margin-bottom: 40rpx;
box-shadow: 0 10rpx 30rpx rgba(255, 59, 48, 0.3);
transition: all 0.3s ease;
}
.simple-record-btn.recording {
background: #007AFF;
box-shadow: 0 10rpx 30rpx rgba(0, 122, 255, 0.3);
transform: scale(1.1);
}
.btn-icon {
width: 100rpx;
height: 100rpx;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 20rpx;
}
.icon-start {
color: white;
font-size: 80rpx;
line-height: 1;
}
.icon-stop {
color: white;
font-size: 60rpx;
line-height: 1;
}
.btn-text {
color: white;
font-size: 28rpx;
font-weight: bold;
}
.recording-time {
font-size: 36rpx;
color: #333;
font-family: monospace;
font-weight: bold;
margin-top: 20rpx;
padding: 20rpx 40rpx;
background: white;
border-radius: 50rpx;
box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.1);
}
.status-message {
position: fixed;
bottom: 100rpx;
left: 50%;
transform: translateX(-50%);
background: rgba(0, 0, 0, 0.8);
color: white;
padding: 20rpx 40rpx;
border-radius: 50rpx;
font-size: 28rpx;
z-index: 1000;
}
</style>

BIN
static/index/back.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
static/index/setting.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 KiB

View File

@ -4,5 +4,8 @@ Promise.resolve("./pages/camera.js").then((res) => {
Promise.resolve("./pages/fullcamera.js").then((res) => {
res();
});
Promise.resolve("./pages/fullcamera.js").then((res) => {
res();
});
Promise.resolve("./app.css.js").then(() => {
});

View File

@ -54,6 +54,7 @@ const _sfc_main = {
uni.$on("fullmonitor:changeinit", (number) => {
this.$refs.monitor.initAutoPlay(number);
uni.setStorageSync("saveinit", number);
formatAppLog("log", "at pages/fullcamera.nvue:63", "切换了", number);
this.suo = true;
});
uni.$on("fullmonitor:isshow", (bool) => this.isshow = bool);
@ -73,7 +74,7 @@ const _sfc_main = {
uni.$on("fullmonitor:test", this.test);
},
onUnload() {
formatAppLog("log", "at pages/fullcamera.nvue:84", "fullcamera 卸载,清理事件");
formatAppLog("log", "at pages/fullcamera.nvue:85", "fullcamera 卸载,清理事件");
if (this.globalEvent && this.globalEvent.removeEventListener) {
this.globalEvent.removeEventListener("myEvent");
}
@ -100,30 +101,30 @@ const _sfc_main = {
methods: {
/* ------------------ 原有功能 ------------------ */
handleTelEvent(event) {
formatAppLog("log", "at pages/fullcamera.nvue:115", "Tel event detail:", event.detail);
formatAppLog("log", "at pages/fullcamera.nvue:116", "Tel event detail:", event.detail);
},
killView() {
this.$refs.monitor.killView && this.$refs.monitor.killView();
},
switchDisplay(mode) {
formatAppLog("log", "at pages/fullcamera.nvue:123", "zzzzz", mode);
formatAppLog("log", "at pages/fullcamera.nvue:124", "zzzzz", mode);
this.$refs.monitor && this.$refs.monitor.switchDisplayModeFragment(mode);
},
startAlarm() {
this.isAlarming = true;
this.$refs.monitor.startOrStopManualAlarm(this.isAlarming, (res) => {
formatAppLog("log", "at pages/fullcamera.nvue:130", "startAlarm callback:", res);
formatAppLog("log", "at pages/fullcamera.nvue:131", "startAlarm callback:", res);
});
},
stopAlarm() {
this.isAlarming = false;
this.$refs.monitor.startOrStopManualAlarm(this.isAlarming, (res) => {
formatAppLog("log", "at pages/fullcamera.nvue:136", "stopAlarm callback:", res);
formatAppLog("log", "at pages/fullcamera.nvue:137", "stopAlarm callback:", res);
});
},
flipImage(type) {
this.$refs.monitor.changeImageSwitch(type, (res) => {
formatAppLog("log", "at pages/fullcamera.nvue:142", "flipImage callback:", res);
formatAppLog("log", "at pages/fullcamera.nvue:143", "flipImage callback:", res);
});
},
resumeOrPause() {
@ -160,7 +161,7 @@ const _sfc_main = {
}
try {
this.$refs.monitor.snapShot((res) => {
formatAppLog("log", "at pages/fullcamera.nvue:188", "snapShot callback:", res);
formatAppLog("log", "at pages/fullcamera.nvue:189", "snapShot callback:", res);
this._handleSnapshotResultFromNative(res, payload.reqId);
});
uni.showToast({
@ -169,7 +170,7 @@ const _sfc_main = {
duration: 800
});
} catch (err) {
formatAppLog("error", "at pages/fullcamera.nvue:197", "snapShot 调用失败", err);
formatAppLog("error", "at pages/fullcamera.nvue:198", "snapShot 调用失败", err);
uni.showToast({
title: "snapShot 调用失败",
icon: "none"
@ -201,7 +202,7 @@ const _sfc_main = {
}
try {
this.$refs.monitor.startRecord((res) => {
formatAppLog("log", "at pages/fullcamera.nvue:230", "startRecord callback:", res);
formatAppLog("log", "at pages/fullcamera.nvue:231", "startRecord callback:", res);
if (payload.reqId) {
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
ok: true,
@ -215,7 +216,7 @@ const _sfc_main = {
icon: "none"
});
} catch (err) {
formatAppLog("error", "at pages/fullcamera.nvue:245", "startRecord 调用失败", err);
formatAppLog("error", "at pages/fullcamera.nvue:246", "startRecord 调用失败", err);
uni.showToast({
title: "startRecord 调用失败",
icon: "none"
@ -250,11 +251,11 @@ const _sfc_main = {
}
try {
this.$refs.monitor.stopRecord((res) => {
formatAppLog("log", "at pages/fullcamera.nvue:284", "stopRecord callback:", res);
formatAppLog("log", "at pages/fullcamera.nvue:285", "stopRecord callback:", res);
this._handleRecordResultFromNative(res, payload.reqId);
});
} catch (err) {
formatAppLog("error", "at pages/fullcamera.nvue:289", "stopRecord 调用失败", err);
formatAppLog("error", "at pages/fullcamera.nvue:290", "stopRecord 调用失败", err);
uni.showToast({
title: "stopRecord 调用失败",
icon: "none"
@ -289,7 +290,7 @@ const _sfc_main = {
}
try {
this.$refs.monitor.openTalk((res) => {
formatAppLog("log", "at pages/fullcamera.nvue:326", "openTalk callback:", res);
formatAppLog("log", "at pages/fullcamera.nvue:327", "openTalk callback:", res);
if (payload.reqId) {
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
ok: true,
@ -303,7 +304,7 @@ const _sfc_main = {
icon: "none"
});
} catch (err) {
formatAppLog("error", "at pages/fullcamera.nvue:341", "openTalk 调用失败", err);
formatAppLog("error", "at pages/fullcamera.nvue:342", "openTalk 调用失败", err);
uni.showToast({
title: "openTalk 调用失败",
icon: "none"
@ -335,7 +336,7 @@ const _sfc_main = {
}
try {
this.$refs.monitor.stopTalk((res) => {
formatAppLog("log", "at pages/fullcamera.nvue:374", "stopTalk callback:", res);
formatAppLog("log", "at pages/fullcamera.nvue:375", "stopTalk callback:", res);
if (payload.reqId) {
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
ok: true,
@ -345,7 +346,7 @@ const _sfc_main = {
});
this.isTalking = false;
} catch (err) {
formatAppLog("error", "at pages/fullcamera.nvue:384", "stopTalk 调用失败", err);
formatAppLog("error", "at pages/fullcamera.nvue:385", "stopTalk 调用失败", err);
uni.showToast({
title: "stopTalk 调用失败",
icon: "none"
@ -363,19 +364,19 @@ const _sfc_main = {
// 处理来自模板 @onSnapShot 的事件event.detail
handleSnapShotEvent(event) {
const payload = event && event.detail ? event.detail : event;
formatAppLog("log", "at pages/fullcamera.nvue:404", "onSnapShot event:", payload);
formatAppLog("log", "at pages/fullcamera.nvue:405", "onSnapShot event:", payload);
this._handleSnapshotResultFromNative(payload);
},
// 处理来自模板 @onRecord 的事件event.detail
handleRecordEvent(event) {
const payload = event && event.detail ? event.detail : event;
formatAppLog("log", "at pages/fullcamera.nvue:412", "onRecord event:", payload);
formatAppLog("log", "at pages/fullcamera.nvue:413", "onRecord event:", payload);
this._handleRecordResultFromNative(payload);
},
// 处理来自模板 @onTalkStatus 的事件
handleTalkEvent(event) {
const payload = event && event.detail ? event.detail : event;
formatAppLog("log", "at pages/fullcamera.nvue:419", "onTalkStatus event:", payload);
formatAppLog("log", "at pages/fullcamera.nvue:420", "onTalkStatus event:", payload);
const status = payload && payload.talkStatus;
const tips = payload && payload.tips;
uni.$emit("fullmonitor:talk:status", payload);
@ -443,7 +444,7 @@ const _sfc_main = {
let payload = res;
if (res.detail)
payload = res.detail;
formatAppLog("log", "at pages/fullcamera.nvue:496", "snapshot payload normalized:", payload);
formatAppLog("log", "at pages/fullcamera.nvue:497", "snapshot payload normalized:", payload);
if (reqIdFromCallback) {
uni.$emit(`fullmonitor:response:${reqIdFromCallback}`, {
ok: !!payload.snapShotResult,
@ -479,7 +480,7 @@ const _sfc_main = {
icon: "none",
duration: 2e3
});
formatAppLog("warn", "at pages/fullcamera.nvue:539", "snapshot failed reason:", err, payload);
formatAppLog("warn", "at pages/fullcamera.nvue:540", "snapshot failed reason:", err, payload);
}
},
_handleRecordResultFromNative(res, reqIdFromCallback = null) {
@ -500,7 +501,7 @@ const _sfc_main = {
let payload = res;
if (res.detail)
payload = res.detail;
formatAppLog("log", "at pages/fullcamera.nvue:561", "record payload normalized:", payload);
formatAppLog("log", "at pages/fullcamera.nvue:562", "record payload normalized:", payload);
if (reqIdFromCallback) {
uni.$emit(`fullmonitor:response:${reqIdFromCallback}`, {
ok: !!(payload.recordUrl || payload.snapShotResult),
@ -524,7 +525,7 @@ const _sfc_main = {
duration: 1400
});
this.isRecording = false;
formatAppLog("log", "at pages/fullcamera.nvue:592", "录屏地址:", payload.recordUrl);
formatAppLog("log", "at pages/fullcamera.nvue:593", "录屏地址:", payload.recordUrl);
} else if (payload.recordFailedReason) {
uni.showToast({
title: "录屏失败: " + payload.recordFailedReason,
@ -532,7 +533,7 @@ const _sfc_main = {
duration: 2e3
});
this.isRecording = false;
formatAppLog("warn", "at pages/fullcamera.nvue:600", "record failed reason:", payload.recordFailedReason);
formatAppLog("warn", "at pages/fullcamera.nvue:601", "record failed reason:", payload.recordFailedReason);
} else {
if (payload.snapShotResult === true) {
uni.showToast({
@ -556,12 +557,12 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
}, [
createElementVNode("div", {
class: "center-column",
style: normalizeStyle({ height: $data.isshow ? "500px" : "0px" })
style: normalizeStyle({ height: $data.isshow ? "449px" : "0px" })
}, [
createVNode(_component_MonitorView, {
ref: "monitor",
init: "5",
style: { "width": "800px", "height": "500px" },
style: { "width": "800px", "height": "450px" },
onOnTel: $options.handleTelEvent,
onOnSnapShot: $options.handleSnapShotEvent,
onOnRecord: $options.handleRecordEvent,

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -7,8 +7,8 @@
"id": "__UNI__FB2D473",
"name": "护理单元",
"version": {
"name": "1.0.018",
"code": 10018
"name": "1.0.020",
"code": 10020
},
"description": "护理单元",
"developer": {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
.simple-recorder{padding:3.125rem .9375rem;display:flex;flex-direction:column;align-items:center;min-height:100vh;background:#f5f5f5}.simple-record-btn{width:6.25rem;height:6.25rem;border-radius:50%;background:#ff3b30;display:flex;flex-direction:column;align-items:center;justify-content:center;margin-bottom:1.25rem;box-shadow:0 .3125rem .9375rem rgba(255,59,48,.3);transition:all .3s ease}.simple-record-btn.recording{background:#007aff;box-shadow:0 .3125rem .9375rem rgba(0,122,255,.3);transform:scale(1.1)}.btn-icon{width:3.125rem;height:3.125rem;display:flex;align-items:center;justify-content:center;margin-bottom:.625rem}.icon-start{color:#fff;font-size:2.5rem;line-height:1}.icon-stop{color:#fff;font-size:1.875rem;line-height:1}.btn-text{color:#fff;font-size:.875rem;font-weight:700}.recording-time{font-size:1.125rem;color:#333;font-family:monospace;font-weight:700;margin-top:.625rem;padding:.625rem 1.25rem;background:#fff;border-radius:1.5625rem;box-shadow:0 .125rem .625rem rgba(0,0,0,.1)}.status-message{position:fixed;bottom:3.125rem;left:50%;transform:translate(-50%);background:rgba(0,0,0,.8);color:#fff;padding:.625rem 1.25rem;border-radius:1.5625rem;font-size:.875rem;z-index:1000}

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
.index-content-other[data-v-9599d5fa]{width:100%;height:100%;transition:opacity 1s ease;position:relative;background-color:#eff0f4}.index-content-down[data-v-9599d5fa]{position:absolute;bottom:1.25rem;left:50%;transform:translate(-50%)}.index-content-right[data-v-9599d5fa]{width:100%;border-radius:1.5625rem;display:flex;align-items:center;padding-top:3.125rem;font-size:1rem;position:relative}.index-content-right .index-content-title[data-v-9599d5fa]{position:absolute;top:1.875rem;left:1.875rem;display:flex;align-items:center}.index-content-right .index-content-title .shu[data-v-9599d5fa]{width:.625rem;height:1.5625rem;background:linear-gradient(to right,#0052c2,#00b4ff);border-radius:.625rem;margin-right:.9375rem}.index-content-right .index-content-title .shu-font[data-v-9599d5fa]{color:#415273;font-size:1.09375rem}.saomiao[data-v-9599d5fa]{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);display:flex;z-index:1}.saomiao .saoma-input[data-v-9599d5fa]{background-color:#fff;width:17.1875rem;height:2.8125rem;border-radius:.9375rem;padding-left:3.125rem;z-index:2}.saomiao .left-img[data-v-9599d5fa]{width:1.5625rem;height:1.5625rem;position:absolute;top:50%;left:.9375rem;transform:translateY(-50%);z-index:3}.saomiao .right-img[data-v-9599d5fa]{width:1.5625rem;height:1.5625rem;position:absolute;top:50%;right:6.875rem;transform:translateY(-50%);z-index:2}.blue-button[data-v-9599d5fa]{margin-left:.9375rem;width:5.3125rem;height:2.8125rem;border-radius:1.25rem;display:flex;justify-content:center;align-items:center;color:#007cff;font-size:.9375rem;background-color:#ddf0ff;border:.03125rem solid #007CFF}.big-ball[data-v-9599d5fa]{width:6.25rem;height:6.25rem;position:absolute;top:50%;left:-1.71875rem;transform:translateY(-50%);border-radius:50%;background-color:#dbe4f6}.big-ball .ball[data-v-9599d5fa]{width:4.6875rem;height:4.6875rem;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);border-radius:50%;background-color:#cfddf1}.back-img[data-v-9599d5fa]{width:.9375rem;height:.9375rem;margin-left:3.125rem;margin-right:.625rem}.big-bgc[data-v-9599d5fa]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:34.375rem;height:34.375rem}.big-img[data-v-9599d5fa]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:28.125rem;height:28.125rem}.card[data-v-9599d5fa]{width:18.75rem;margin-left:4%;height:14.0625rem;box-shadow:.09375rem .1875rem .375rem .09375rem rgba(206,206,206,.5);background-color:#f4f5f7;border-radius:.9375rem;margin-top:.15625rem;margin-bottom:1.09375rem;padding:0 .78125rem;position:relative;display:flex;justify-content:center;align-items:center;flex-direction:column;overflow:hidden}.card-title[data-v-9599d5fa]{width:100%;height:4.0625rem;display:flex;align-items:center;justify-content:space-between}.main-title[data-v-9599d5fa]{display:flex;align-items:center;margin-top:2.1875rem;margin-bottom:.3125rem}.video-father[data-v-9599d5fa]{width:1.875rem;height:1.875rem;display:flex;justify-content:center;align-items:center;margin-left:.46875rem}.edit-img[data-v-9599d5fa]{width:1.25rem;height:.9375rem}.play-img[data-v-9599d5fa]{position:absolute;top:1.5625rem;right:.9375rem;width:4.0625rem;height:1.71875rem;font-size:.8125rem;border-radius:1.09375rem;border:.0625rem solid #999;display:flex;justify-content:center;align-items:center}.card-tags[data-v-9599d5fa]{position:absolute;top:1.5625rem;left:0;width:6.25rem;height:2.03125rem;font-size:.78125rem;display:flex;justify-content:center;align-items:center}.popup-any[data-v-9599d5fa]{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .5s ease;-webkit-backdrop-filter:blur(.03125rem);backdrop-filter:blur(.03125rem);background-color:rgba(236,237,241,.4);z-index:999}.mask[data-v-9599d5fa]{position:absolute;top:0;right:0;bottom:0;left:0}.rename-father[data-v-9599d5fa]{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:18.75rem;height:14.0625rem;border-radius:.9375rem;box-shadow:.0625rem .125rem .25rem .0625rem rgba(0,0,0,.3);background-color:#fff;display:flex;flex-direction:column;align-items:center;padding:0 .9375rem;z-index:999}.rename-father .rename-title[data-v-9599d5fa]{width:100%;height:2.5rem;display:flex;justify-content:center;align-items:center;margin-top:.9375rem;margin-bottom:.625rem;font-size:1rem}.rename-father .rename-gray[data-v-9599d5fa]{width:100%;height:2.5rem;display:flex;color:#a7a7a7;align-items:center}.rename-father .rename-input[data-v-9599d5fa]{width:100%;height:2.5rem;display:flex;background-color:#f5f6fa;border-radius:.625rem;color:#a7a7a7;align-items:center;padding:0 .625rem;position:relative}.rename-father .rename-input .uni-input[data-v-9599d5fa]{font-size:.78125rem;width:100%}.rename-father .rename-input .left-img[data-v-9599d5fa]{width:1.5625rem;height:1.5625rem;margin-right:.46875rem}.rename-father .rename-input .right-img[data-v-9599d5fa]{position:absolute;right:.9375rem;top:50%;transform:translateY(-50%);width:.9375rem;height:.9375rem}
.index-content-other[data-v-f71fcced]{width:100%;height:100%;transition:opacity 1s ease;position:relative;background-color:#eff0f4}.index-content-down[data-v-f71fcced]{position:fixed;bottom:1.25rem;left:50%;transform:translate(-50%)}.index-content-right[data-v-f71fcced]{width:100%;border-radius:1.5625rem;display:flex;align-items:center;padding-top:3.125rem;font-size:1rem;position:relative}.index-content-right .index-content-title[data-v-f71fcced]{position:absolute;top:1.875rem;left:1.875rem;display:flex;align-items:center}.index-content-right .index-content-title .shu[data-v-f71fcced]{width:.625rem;height:1.5625rem;background:linear-gradient(to right,#0052c2,#00b4ff);border-radius:.625rem;margin-right:.9375rem}.index-content-right .index-content-title .shu-font[data-v-f71fcced]{color:#415273;font-size:1.09375rem}.saomiao[data-v-f71fcced]{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);display:flex;z-index:1}.saomiao .saoma-input[data-v-f71fcced]{background-color:#fff;width:17.1875rem;height:2.8125rem;border-radius:.9375rem;padding-left:3.125rem;z-index:2}.saomiao .left-img[data-v-f71fcced]{width:1.5625rem;height:1.5625rem;position:absolute;top:50%;left:.9375rem;transform:translateY(-50%);z-index:3}.saomiao .right-img[data-v-f71fcced]{width:1.5625rem;height:1.5625rem;position:absolute;top:50%;right:6.875rem;transform:translateY(-50%);z-index:2}.blue-button[data-v-f71fcced]{margin-left:.9375rem;width:5.3125rem;height:2.8125rem;border-radius:1.25rem;display:flex;justify-content:center;align-items:center;color:#007cff;font-size:.9375rem;background-color:#ddf0ff;border:.03125rem solid #007CFF}.big-ball[data-v-f71fcced]{width:6.25rem;height:6.25rem;position:absolute;top:50%;left:-1.71875rem;transform:translateY(-50%);border-radius:50%;background-color:#dbe4f6}.big-ball .ball[data-v-f71fcced]{width:4.6875rem;height:4.6875rem;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);border-radius:50%;background-color:#cfddf1}.back-img[data-v-f71fcced]{width:.9375rem;height:.9375rem;margin-left:3.125rem;margin-right:.625rem}.big-bgc[data-v-f71fcced]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:34.375rem;height:34.375rem}.big-img[data-v-f71fcced]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:28.125rem;height:28.125rem}.card[data-v-f71fcced]{width:18.75rem;margin-left:4%;height:14.0625rem;box-shadow:.09375rem .1875rem .375rem .09375rem rgba(206,206,206,.5);background-color:#f4f5f7;border-radius:.9375rem;margin-top:.15625rem;margin-bottom:1.09375rem;padding:0 .78125rem;position:relative;display:flex;justify-content:center;align-items:center;flex-direction:column;overflow:hidden}.card-title[data-v-f71fcced]{width:100%;height:4.0625rem;display:flex;align-items:center;justify-content:space-between}.main-title[data-v-f71fcced]{display:flex;align-items:center;margin-top:2.1875rem;margin-bottom:.3125rem}.video-father[data-v-f71fcced]{width:1.875rem;height:1.875rem;display:flex;justify-content:center;align-items:center;margin-left:.46875rem}.edit-img[data-v-f71fcced]{width:1.25rem;height:.9375rem}.play-img[data-v-f71fcced]{position:absolute;top:1.5625rem;right:.9375rem;width:4.0625rem;height:1.71875rem;font-size:.8125rem;border-radius:1.09375rem;border:.0625rem solid #999;display:flex;justify-content:center;align-items:center}.card-tags[data-v-f71fcced]{position:absolute;top:1.5625rem;left:0;width:6.25rem;height:2.03125rem;font-size:.78125rem;display:flex;justify-content:center;align-items:center}.popup-any[data-v-f71fcced]{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .5s ease;-webkit-backdrop-filter:blur(.03125rem);backdrop-filter:blur(.03125rem);background-color:rgba(236,237,241,.4);z-index:999}.mask[data-v-f71fcced]{position:absolute;top:0;right:0;bottom:0;left:0}.rename-father[data-v-f71fcced]{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:18.75rem;height:14.0625rem;border-radius:.9375rem;box-shadow:.0625rem .125rem .25rem .0625rem rgba(0,0,0,.3);background-color:#fff;display:flex;flex-direction:column;align-items:center;padding:0 .9375rem;z-index:999}.rename-father .rename-title[data-v-f71fcced]{width:100%;height:2.5rem;display:flex;justify-content:center;align-items:center;margin-top:.9375rem;margin-bottom:.625rem;font-size:1rem}.rename-father .rename-gray[data-v-f71fcced]{width:100%;height:2.5rem;display:flex;color:#a7a7a7;align-items:center}.rename-father .rename-input[data-v-f71fcced]{width:100%;height:2.5rem;display:flex;background-color:#f5f6fa;border-radius:.625rem;color:#a7a7a7;align-items:center;padding:0 .625rem;position:relative}.rename-father .rename-input .uni-input[data-v-f71fcced]{font-size:.78125rem;width:100%}.rename-father .rename-input .left-img[data-v-f71fcced]{width:1.5625rem;height:1.5625rem;margin-right:.46875rem}.rename-father .rename-input .right-img[data-v-f71fcced]{position:absolute;right:.9375rem;top:50%;transform:translateY(-50%);width:.9375rem;height:.9375rem}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 934 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Some files were not shown because too many files have changed in this diff Show More