13404089107
2025-05-23 e3a78db2a9b791284dfbc087f393ecca08de1ca1
Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/H5/threeSide
7个文件已修改
135 ■■■■ 已修改文件
H5/components/voiceInputPopup.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
H5/manifest.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
H5/pages/Appeal/Appeal.vue 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
H5/pages/dispatchWorkOrder/dispatchWorkOrder.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
H5/pages/work-detail/work-detail.vue 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
H5/store/index.js 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
H5/uni_modules/mumu-recorder/components/mumu-recorder/mumu-recorder.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
H5/components/voiceInputPopup.vue
@@ -146,7 +146,11 @@
      // 清空录音片段
      this.recordSegments = []
      this.currentSegment = null
      // 重置计时器
      // 停止计时器
      this.stopTimer()
      // 重置录音状态
      this.isRecording = false
      this.isPaused = false
      this.seconds = 0
      this.minutes = 0
      this.hours = 0
H5/manifest.json
@@ -1,6 +1,6 @@
{
    "name": "“三个身边”群众工作机制",
    "appid": "__UNI__DB035F5",
    "appid": "__UNI__5DC32B0",
    "description": "",
    "versionName": "1.0.0",
    "versionCode": "100",
H5/pages/Appeal/Appeal.vue
@@ -69,7 +69,7 @@
                <view v-for="item, index in videoContent" :key="index">
                    <view class="pl-19 pr-19 pb-17 pt-17 flex j-between a-center br-8 pink">
                        <view class="flex1">
                            <text class="fs-27 font-bold">语音文件{{ index + 1 }}</text>
                            <text class="fs-27 font-bold">语音文件{{ (index + 1) | numToWords }}</text>
                        </view>
                        <view class="flex j-between a-center">
                            <image src="/static/Appeal/delete.png" class="w-27 h-27 mr-38" mode=""
@@ -179,9 +179,9 @@
                descriptionTitle: '',
                descriptionContent: '',
                videoContent: [],
                latitude: '30.5061493',
                longitude: '105.574542',
                location: '测试地址',
            latitude: '',
            longitude: '',
            location: '',
                images: [],
                videos: [],
                voiceFile: '', //语音文件多个逗号拼接
@@ -192,6 +192,24 @@
        computed: {
            ...mapState(["playFlag"]),
        },
    filters: {
        formatTime(val) {
            if (!val) return ''
            return dayjs(val).format('YYYY-MM-DD HH:mm:ss')
        },
        numToWords(val) {
            const words = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十']
            // 处理 0-10
            if (val >= 0 && val <= 10) return words[val];
            // 处理 11-99
            if (val > 10 && val < 100) {
                const ten = Math.floor(val / 10);
                const unit = val % 10;
                return `${ten > 1 ? words[ten] : ''}十${unit > 0 ? words[unit] : ''}`;
            }
            return val; // 超过99返回原数字
        }
    },
        onReady() {
            uni.setNavigationBarTitle({
                title: '诉求录入'
H5/pages/dispatchWorkOrder/dispatchWorkOrder.vue
@@ -25,7 +25,12 @@
                        </view>
                    </view>
                    <view class="person-item flex1">{{detail.name}}</view>
                    <view class="flex a-center">
                    <view class="phone-item flex1">{{detail.contactNumber}}</view>
                        <image @click.stop="callPhone(detail.contactNumber)" src="../../static/tell.png"
                            class="w-58 h-58 shrink0 " />
                    </view>
                </view>
            </view>
        </view>
@@ -93,6 +98,12 @@
            }
        },
        methods: {
            callPhone(phoneNumber) {
                uni.makePhoneCall({
                    phoneNumber
                });
            },
            close() {
                this.showPop = false
            },
H5/pages/work-detail/work-detail.vue
@@ -5,7 +5,8 @@
        <view class="allContent">
            <view class="topStatus">
                <view class="status">
                    {{ ['正在办理', '延期办理', '超时办理', '已办结 ', '群众撤销', '上报待审核', '上级驳回', '延期待审核', '已办结'][orderInfo.status] || '' }}
                    {{ ['正在办理', '延期办理', '超时办理', '已办结 ', '群众撤销', '上报待审核', '上级驳回', '延期待审核', '已办结'][orderInfo.status] || ''
                    }}
                </view>
                <view class="flex a-center j-between mb-17">
                    <view class="tit">当前状态</view>
@@ -165,12 +166,12 @@
            <!-- 问题描述 -->
            <view class="problem">
                <view class="title">问题描述</view>
                <view v-for="(item,index) in getVoiceFile(orderInfo.voiceFile)" :key="index"
                <view v-for="(item, index) in videoContent" :key="index"
                    class="flex a-center j-between py-17 px-19 br-8 bgcolor1 mb-19">
                    <view class="fs-27 lh-38">语音文件{{(index + 1) | numToWords}}</view>
                    <image v-if="!playFlag" @click.stop="playRecording(item)" src="../../static/24gf-playCircle@2x.png"
                        class="w-27 h-27 shrink0" />
                    <image v-else @click.stop="pausePlaying" src="../../static/pausePlaying.png"
                    <image v-if="!playFlag" @click.stop="onPlayRecording(index)"
                        src="../../static/24gf-playCircle@2x.png" class="w-27 h-27 shrink0" />
                    <image v-else @click.stop="onPausePlaying(index)" src="../../static/pausePlaying.png"
                        class="w-27 h-27 shrink0" />
                </view>
                <view class="desc">
@@ -419,6 +420,8 @@
                userInfo: uni.getStorageSync('userInfo'), //个人信息
                isParty: false, //true 党员 false 管理员
            videoContent:[],
            };
        },
        computed: {
@@ -468,7 +471,24 @@
            ...mapActions(["playRecording", "pausePlaying"]),
            getVoiceFile(voiceFile) {
                if (!voiceFile || voiceFile.length == 0) return []
                return voiceFile.split(',')
            this.videoContent = voiceFile.split(',').map(item => {
                return {
                    url: item,
                    playing: false
                }
            })
        },
        onPlayRecording(index) {
            // 先处理本地播放状态
            this.videoContent.forEach((item, i) => {
                item.playing = i === index;
            });
            // 调用store的播放方法,传url
            this.playRecording(this.videoContent[index].url);
        },
        onPausePlaying(index) {
            this.videoContent[index].playing = false;
            this.pausePlaying(this.videoContent[index].url);
            },
            callPhone(phoneNumber) {
                uni.makePhoneCall({
@@ -541,6 +561,7 @@
                    this.orderInfo = {
                        ...res.data
                    }
                this.getVoiceFile(this.orderInfo.voiceFile)
                })
            },
H5/store/index.js
@@ -25,18 +25,63 @@
            }
            state.innerAudioContext = uni.createInnerAudioContext();
            state.innerAudioContext.autoplay = true;
            // state.innerAudioContext.src =
            //     'https://haitunyingyu.obs.cn-southwest-2.myhuaweicloud.com/admin/6660c5497ff34ee5b2bddaed01dd3880.wav';
            state.innerAudioContext.src = url
            // 设置音频格式为MPEG
            state.innerAudioContext.format = 'mpeg';
            state.innerAudioContext.src = url;
            // 显示音频信息
            // uni.showToast({
            //     title: '音频链接:' + url,
            //     icon: 'none',
            //     duration: 3000
            // });
            // 添加加载事件处理
            state.innerAudioContext.onCanplay(() => {
                console.log('音频可以播放了');
                uni.showToast({
                    title: '音频已准备就绪',
                    icon: 'none',
                    duration: 2000
                });
            });
            state.innerAudioContext.onPlay(() => {
                state.playFlag = true;
                uni.showToast({
                    title: '开始播放',
                    icon: 'none',
                    duration: 2000
            });
            });
            state.innerAudioContext.onError((res) => {
                // console.log('播放错误', res);
                console.log('播放错误', res);
                uni.showToast({
                    title: '播放错误'+`${res}`,
                    icon: 'none',
                    duration: 3000
                });
                // 显示具体的错误信息
                // let errorMsg = '音频播放失败';
                // if (res.errMsg) {
                //     errorMsg += ':' + res.errMsg;
                // }
                // uni.showToast({
                //     title: errorMsg,
                //     icon: 'none',
                //     duration: 3000
                // });
                dispatch('stopPlaying')
            });
            state.innerAudioContext.onEnded((res) => {
                // console.log('播放自然结束', res);
                console.log('播放自然结束', res);
                uni.showToast({
                    title: '播放结束',
                    icon: 'none',
                    duration: 2000
                });
                dispatch('stopPlaying')
            });
        },
H5/uni_modules/mumu-recorder/components/mumu-recorder/mumu-recorder.vue
@@ -70,7 +70,7 @@
                this.chunks.push(e.data)
            },
            saveRecordingData() {
                const blob = new Blob(this.chunks, { 'type': 'audio/mpeg' }),
                const blob = new Blob(this.chunks, { 'type': 'audio/mp3' }),
                    localUrl = URL.createObjectURL(blob)
                const endTime = new Date().getTime()