新主页
|
|
@ -2,8 +2,8 @@
|
||||||
"name" : "护理单元",
|
"name" : "护理单元",
|
||||||
"appid" : "__UNI__FB2D473",
|
"appid" : "__UNI__FB2D473",
|
||||||
"description" : "护理单元",
|
"description" : "护理单元",
|
||||||
"versionName" : "1.0.018",
|
"versionName" : "1.0.020",
|
||||||
"versionCode" : 10018,
|
"versionCode" : 10020,
|
||||||
"transformPx" : false,
|
"transformPx" : false,
|
||||||
/* 5+App特有相关 */
|
/* 5+App特有相关 */
|
||||||
"app-plus" : {
|
"app-plus" : {
|
||||||
|
|
|
||||||
10
pages.json
|
|
@ -15,10 +15,18 @@
|
||||||
"navigationStyle": "custom"
|
"navigationStyle": "custom"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
// 录屏
|
||||||
|
{
|
||||||
|
"path": "pages/recording/recorder",
|
||||||
|
"style": {
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
// 动画首页
|
// 动画首页
|
||||||
{
|
{
|
||||||
"path": "pages/login/animationpage",
|
"path": "pages/login/newanimationpage",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationStyle": "custom"
|
"navigationStyle": "custom"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -59,9 +59,9 @@
|
||||||
}
|
}
|
||||||
const tabbrarr = ref([
|
const tabbrarr = ref([
|
||||||
{ name: '首页', url: '/static/shouye/sy/h0.png', urls: '/static/shouye/sy/h1.png' },
|
{ name: '首页', url: '/static/shouye/sy/h0.png', urls: '/static/shouye/sy/h1.png' },
|
||||||
{ name: '护嘱', url: '/static/shouye/sy/n0.png', urls: '/static/shouye/sy/n1.png' },
|
{ name: '护理', url: '/static/shouye/sy/n0.png', urls: '/static/shouye/sy/n1.png' },
|
||||||
{ name: '医嘱', url: '/static/shouye/sy/y0.png', urls: '/static/shouye/sy/y1.png' },
|
{ name: '医疗', url: '/static/shouye/sy/y0.png', urls: '/static/shouye/sy/y1.png' },
|
||||||
{ name: '后勤', url: '/static/shouye/sy/l0.png', urls: '/static/shouye/sy/l1.png' },
|
{ name: '行政', url: '/static/shouye/sy/l0.png', urls: '/static/shouye/sy/l1.png' },
|
||||||
{ name: '物联', url: '/static/shouye/sy/g0.png', urls: '/static/shouye/sy/g1.png' },
|
{ name: '物联', url: '/static/shouye/sy/g0.png', urls: '/static/shouye/sy/g1.png' },
|
||||||
{ name: '返回', url: '/static/shouye/sy/f0.png', urls: '/static/shouye/sy/f1.png' },
|
{ name: '返回', url: '/static/shouye/sy/f0.png', urls: '/static/shouye/sy/f1.png' },
|
||||||
])
|
])
|
||||||
|
|
|
||||||
|
|
@ -375,7 +375,7 @@
|
||||||
});
|
});
|
||||||
connectWs(); // 主动连接 WebSocket
|
connectWs(); // 主动连接 WebSocket
|
||||||
}
|
}
|
||||||
jumpTo(`/pages/login/animationpage`)
|
jumpTo(`/pages/login/newanimationpage`)
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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>
|
||||||
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 5.4 KiB |
|
After Width: | Height: | Size: 5.4 KiB |
|
After Width: | Height: | Size: 118 KiB |
|
After Width: | Height: | Size: 7.9 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 130 KiB |
|
After Width: | Height: | Size: 133 KiB |
|
After Width: | Height: | Size: 233 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 176 KiB |
|
After Width: | Height: | Size: 126 KiB |
|
After Width: | Height: | Size: 9.7 KiB |
|
After Width: | Height: | Size: 9.9 KiB |
|
After Width: | Height: | Size: 130 KiB |
|
After Width: | Height: | Size: 355 KiB |
|
|
@ -4,5 +4,8 @@ Promise.resolve("./pages/camera.js").then((res) => {
|
||||||
Promise.resolve("./pages/fullcamera.js").then((res) => {
|
Promise.resolve("./pages/fullcamera.js").then((res) => {
|
||||||
res();
|
res();
|
||||||
});
|
});
|
||||||
|
Promise.resolve("./pages/fullcamera.js").then((res) => {
|
||||||
|
res();
|
||||||
|
});
|
||||||
Promise.resolve("./app.css.js").then(() => {
|
Promise.resolve("./app.css.js").then(() => {
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,7 @@ const _sfc_main = {
|
||||||
uni.$on("fullmonitor:changeinit", (number) => {
|
uni.$on("fullmonitor:changeinit", (number) => {
|
||||||
this.$refs.monitor.initAutoPlay(number);
|
this.$refs.monitor.initAutoPlay(number);
|
||||||
uni.setStorageSync("saveinit", number);
|
uni.setStorageSync("saveinit", number);
|
||||||
|
formatAppLog("log", "at pages/fullcamera.nvue:63", "切换了", number);
|
||||||
this.suo = true;
|
this.suo = true;
|
||||||
});
|
});
|
||||||
uni.$on("fullmonitor:isshow", (bool) => this.isshow = bool);
|
uni.$on("fullmonitor:isshow", (bool) => this.isshow = bool);
|
||||||
|
|
@ -73,7 +74,7 @@ const _sfc_main = {
|
||||||
uni.$on("fullmonitor:test", this.test);
|
uni.$on("fullmonitor:test", this.test);
|
||||||
},
|
},
|
||||||
onUnload() {
|
onUnload() {
|
||||||
formatAppLog("log", "at pages/fullcamera.nvue:84", "fullcamera 卸载,清理事件");
|
formatAppLog("log", "at pages/fullcamera.nvue:85", "fullcamera 卸载,清理事件");
|
||||||
if (this.globalEvent && this.globalEvent.removeEventListener) {
|
if (this.globalEvent && this.globalEvent.removeEventListener) {
|
||||||
this.globalEvent.removeEventListener("myEvent");
|
this.globalEvent.removeEventListener("myEvent");
|
||||||
}
|
}
|
||||||
|
|
@ -100,30 +101,30 @@ const _sfc_main = {
|
||||||
methods: {
|
methods: {
|
||||||
/* ------------------ 原有功能 ------------------ */
|
/* ------------------ 原有功能 ------------------ */
|
||||||
handleTelEvent(event) {
|
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() {
|
killView() {
|
||||||
this.$refs.monitor.killView && this.$refs.monitor.killView();
|
this.$refs.monitor.killView && this.$refs.monitor.killView();
|
||||||
},
|
},
|
||||||
switchDisplay(mode) {
|
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);
|
this.$refs.monitor && this.$refs.monitor.switchDisplayModeFragment(mode);
|
||||||
},
|
},
|
||||||
startAlarm() {
|
startAlarm() {
|
||||||
this.isAlarming = true;
|
this.isAlarming = true;
|
||||||
this.$refs.monitor.startOrStopManualAlarm(this.isAlarming, (res) => {
|
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() {
|
stopAlarm() {
|
||||||
this.isAlarming = false;
|
this.isAlarming = false;
|
||||||
this.$refs.monitor.startOrStopManualAlarm(this.isAlarming, (res) => {
|
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) {
|
flipImage(type) {
|
||||||
this.$refs.monitor.changeImageSwitch(type, (res) => {
|
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() {
|
resumeOrPause() {
|
||||||
|
|
@ -160,7 +161,7 @@ const _sfc_main = {
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
this.$refs.monitor.snapShot((res) => {
|
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);
|
this._handleSnapshotResultFromNative(res, payload.reqId);
|
||||||
});
|
});
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
|
|
@ -169,7 +170,7 @@ const _sfc_main = {
|
||||||
duration: 800
|
duration: 800
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
formatAppLog("error", "at pages/fullcamera.nvue:197", "snapShot 调用失败", err);
|
formatAppLog("error", "at pages/fullcamera.nvue:198", "snapShot 调用失败", err);
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: "snapShot 调用失败",
|
title: "snapShot 调用失败",
|
||||||
icon: "none"
|
icon: "none"
|
||||||
|
|
@ -201,7 +202,7 @@ const _sfc_main = {
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
this.$refs.monitor.startRecord((res) => {
|
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) {
|
if (payload.reqId) {
|
||||||
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
ok: true,
|
ok: true,
|
||||||
|
|
@ -215,7 +216,7 @@ const _sfc_main = {
|
||||||
icon: "none"
|
icon: "none"
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
formatAppLog("error", "at pages/fullcamera.nvue:245", "startRecord 调用失败", err);
|
formatAppLog("error", "at pages/fullcamera.nvue:246", "startRecord 调用失败", err);
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: "startRecord 调用失败",
|
title: "startRecord 调用失败",
|
||||||
icon: "none"
|
icon: "none"
|
||||||
|
|
@ -250,11 +251,11 @@ const _sfc_main = {
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
this.$refs.monitor.stopRecord((res) => {
|
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);
|
this._handleRecordResultFromNative(res, payload.reqId);
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
formatAppLog("error", "at pages/fullcamera.nvue:289", "stopRecord 调用失败", err);
|
formatAppLog("error", "at pages/fullcamera.nvue:290", "stopRecord 调用失败", err);
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: "stopRecord 调用失败",
|
title: "stopRecord 调用失败",
|
||||||
icon: "none"
|
icon: "none"
|
||||||
|
|
@ -289,7 +290,7 @@ const _sfc_main = {
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
this.$refs.monitor.openTalk((res) => {
|
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) {
|
if (payload.reqId) {
|
||||||
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
ok: true,
|
ok: true,
|
||||||
|
|
@ -303,7 +304,7 @@ const _sfc_main = {
|
||||||
icon: "none"
|
icon: "none"
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
formatAppLog("error", "at pages/fullcamera.nvue:341", "openTalk 调用失败", err);
|
formatAppLog("error", "at pages/fullcamera.nvue:342", "openTalk 调用失败", err);
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: "openTalk 调用失败",
|
title: "openTalk 调用失败",
|
||||||
icon: "none"
|
icon: "none"
|
||||||
|
|
@ -335,7 +336,7 @@ const _sfc_main = {
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
this.$refs.monitor.stopTalk((res) => {
|
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) {
|
if (payload.reqId) {
|
||||||
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
uni.$emit(`fullmonitor:response:${payload.reqId}`, {
|
||||||
ok: true,
|
ok: true,
|
||||||
|
|
@ -345,7 +346,7 @@ const _sfc_main = {
|
||||||
});
|
});
|
||||||
this.isTalking = false;
|
this.isTalking = false;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
formatAppLog("error", "at pages/fullcamera.nvue:384", "stopTalk 调用失败", err);
|
formatAppLog("error", "at pages/fullcamera.nvue:385", "stopTalk 调用失败", err);
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: "stopTalk 调用失败",
|
title: "stopTalk 调用失败",
|
||||||
icon: "none"
|
icon: "none"
|
||||||
|
|
@ -363,19 +364,19 @@ const _sfc_main = {
|
||||||
// 处理来自模板 @onSnapShot 的事件(event.detail)
|
// 处理来自模板 @onSnapShot 的事件(event.detail)
|
||||||
handleSnapShotEvent(event) {
|
handleSnapShotEvent(event) {
|
||||||
const payload = event && event.detail ? event.detail : 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);
|
this._handleSnapshotResultFromNative(payload);
|
||||||
},
|
},
|
||||||
// 处理来自模板 @onRecord 的事件(event.detail)
|
// 处理来自模板 @onRecord 的事件(event.detail)
|
||||||
handleRecordEvent(event) {
|
handleRecordEvent(event) {
|
||||||
const payload = event && event.detail ? event.detail : 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);
|
this._handleRecordResultFromNative(payload);
|
||||||
},
|
},
|
||||||
// 处理来自模板 @onTalkStatus 的事件
|
// 处理来自模板 @onTalkStatus 的事件
|
||||||
handleTalkEvent(event) {
|
handleTalkEvent(event) {
|
||||||
const payload = event && event.detail ? event.detail : 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 status = payload && payload.talkStatus;
|
||||||
const tips = payload && payload.tips;
|
const tips = payload && payload.tips;
|
||||||
uni.$emit("fullmonitor:talk:status", payload);
|
uni.$emit("fullmonitor:talk:status", payload);
|
||||||
|
|
@ -443,7 +444,7 @@ const _sfc_main = {
|
||||||
let payload = res;
|
let payload = res;
|
||||||
if (res.detail)
|
if (res.detail)
|
||||||
payload = 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) {
|
if (reqIdFromCallback) {
|
||||||
uni.$emit(`fullmonitor:response:${reqIdFromCallback}`, {
|
uni.$emit(`fullmonitor:response:${reqIdFromCallback}`, {
|
||||||
ok: !!payload.snapShotResult,
|
ok: !!payload.snapShotResult,
|
||||||
|
|
@ -479,7 +480,7 @@ const _sfc_main = {
|
||||||
icon: "none",
|
icon: "none",
|
||||||
duration: 2e3
|
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) {
|
_handleRecordResultFromNative(res, reqIdFromCallback = null) {
|
||||||
|
|
@ -500,7 +501,7 @@ const _sfc_main = {
|
||||||
let payload = res;
|
let payload = res;
|
||||||
if (res.detail)
|
if (res.detail)
|
||||||
payload = 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) {
|
if (reqIdFromCallback) {
|
||||||
uni.$emit(`fullmonitor:response:${reqIdFromCallback}`, {
|
uni.$emit(`fullmonitor:response:${reqIdFromCallback}`, {
|
||||||
ok: !!(payload.recordUrl || payload.snapShotResult),
|
ok: !!(payload.recordUrl || payload.snapShotResult),
|
||||||
|
|
@ -524,7 +525,7 @@ const _sfc_main = {
|
||||||
duration: 1400
|
duration: 1400
|
||||||
});
|
});
|
||||||
this.isRecording = false;
|
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) {
|
} else if (payload.recordFailedReason) {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: "录屏失败: " + payload.recordFailedReason,
|
title: "录屏失败: " + payload.recordFailedReason,
|
||||||
|
|
@ -532,7 +533,7 @@ const _sfc_main = {
|
||||||
duration: 2e3
|
duration: 2e3
|
||||||
});
|
});
|
||||||
this.isRecording = false;
|
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 {
|
} else {
|
||||||
if (payload.snapShotResult === true) {
|
if (payload.snapShotResult === true) {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
|
|
@ -556,12 +557,12 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
||||||
}, [
|
}, [
|
||||||
createElementVNode("div", {
|
createElementVNode("div", {
|
||||||
class: "center-column",
|
class: "center-column",
|
||||||
style: normalizeStyle({ height: $data.isshow ? "500px" : "0px" })
|
style: normalizeStyle({ height: $data.isshow ? "449px" : "0px" })
|
||||||
}, [
|
}, [
|
||||||
createVNode(_component_MonitorView, {
|
createVNode(_component_MonitorView, {
|
||||||
ref: "monitor",
|
ref: "monitor",
|
||||||
init: "5",
|
init: "5",
|
||||||
style: { "width": "800px", "height": "500px" },
|
style: { "width": "800px", "height": "450px" },
|
||||||
onOnTel: $options.handleTelEvent,
|
onOnTel: $options.handleTelEvent,
|
||||||
onOnSnapShot: $options.handleSnapShotEvent,
|
onOnSnapShot: $options.handleSnapShotEvent,
|
||||||
onOnRecord: $options.handleRecordEvent,
|
onOnRecord: $options.handleRecordEvent,
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,8 @@
|
||||||
"id": "__UNI__FB2D473",
|
"id": "__UNI__FB2D473",
|
||||||
"name": "护理单元",
|
"name": "护理单元",
|
||||||
"version": {
|
"version": {
|
||||||
"name": "1.0.018",
|
"name": "1.0.020",
|
||||||
"code": 10018
|
"code": 10020
|
||||||
},
|
},
|
||||||
"description": "护理单元",
|
"description": "护理单元",
|
||||||
"developer": {
|
"developer": {
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
|
|
@ -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}
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 934 B |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 2.1 KiB |