<template>
							 | 
						|
								  <view class="music-container">
							 | 
						|
								
							 | 
						|
								    <!-- 音色列表 -->
							 | 
						|
								    <view class="voice-list">
							 | 
						|
								      <view 
							 | 
						|
								        v-for="(voice, index) in voiceList" 
							 | 
						|
								        :key="voice.voiceType"
							 | 
						|
								        class="voice-item"
							 | 
						|
								        :class="{ 'selected': voice.voiceType === selectedVoiceId }"
							 | 
						|
								        @click="selectedVoiceId = voice.voiceType"
							 | 
						|
								      >
							 | 
						|
								        <view class="voice-avatar">
							 | 
						|
								          <view class="play-icon">
							 | 
						|
								            <uv-icon 
							 | 
						|
								              :name="voice.voiceType === selectedVoiceId ? 'pause' : 'play-right-fill'" 
							 | 
						|
								              size="24" 
							 | 
						|
								              color="#666666"
							 | 
						|
								            ></uv-icon>
							 | 
						|
								          </view>
							 | 
						|
								        </view>
							 | 
						|
								        <view class="voice-info">
							 | 
						|
								          <view class="voice-name">{{ voice.name }}</view>
							 | 
						|
								          <view class="voice-desc">{{ voice.info }}</view>
							 | 
						|
								        </view>
							 | 
						|
								        <view v-if="voice.voiceType === selectedVoiceId" class="selected-tag">
							 | 
						|
								          已选择
							 | 
						|
								        </view>
							 | 
						|
								      </view>
							 | 
						|
								    </view>
							 | 
						|
								
							 | 
						|
								    <!-- 底部固定确认按钮 -->
							 | 
						|
								    <view class="bottom-bar">
							 | 
						|
								      <uv-button 
							 | 
						|
								        type="primary" 
							 | 
						|
								        text="确定" 
							 | 
						|
								        :custom-style="{
							 | 
						|
								          width: '100%',
							 | 
						|
								          height: '82rpx',
							 | 
						|
								          borderRadius: '44rpx',
							 | 
						|
								          backgroundColor: '#06DADC',
							 | 
						|
								          fontSize: '36rpx',
							 | 
						|
								          fontWeight: '500',
							 | 
						|
								          border: '1px solid #06DADC'
							 | 
						|
								        }"
							 | 
						|
								        @click="confirmSelection"
							 | 
						|
								      ></uv-button>
							 | 
						|
								      <uv-safe-bottom></uv-safe-bottom>
							 | 
						|
								    </view>
							 | 
						|
								  </view>
							 | 
						|
								</template>
							 | 
						|
								
							 | 
						|
								<script>
							 | 
						|
								export default {
							 | 
						|
								  data() {
							 | 
						|
								    return {
							 | 
						|
								      selectedVoiceId: '', // 默认选择智小虎
							 | 
						|
								      voiceList: [
							 | 
						|
								
							 | 
						|
								      ]
							 | 
						|
								    }
							 | 
						|
								  },
							 | 
						|
								  computed: {
							 | 
						|
								    // 从Vuex获取音色列表
							 | 
						|
								    storeVoiceList() {
							 | 
						|
								      return this.$store.state.voiceList;
							 | 
						|
								    }
							 | 
						|
								  },
							 | 
						|
								  methods: {
							 | 
						|
								    goBack() {
							 | 
						|
								      uni.navigateBack()
							 | 
						|
								    },
							 | 
						|
								    selectVoice() {
							 | 
						|
								      // console.log('选择音色:', this.selectedVoiceId)
							 | 
						|
								      uni.$emit('selectVoice', this.selectedVoiceId)
							 | 
						|
								      uni.navigateBack()
							 | 
						|
								    },
							 | 
						|
								    confirmSelection() {
							 | 
						|
								      this.selectVoice(this.selectedVoiceId)
							 | 
						|
								      // 保存选择的音色到Vuex
							 | 
						|
								      this.$store.dispatch('setDefaultVoice', this.selectedVoiceId);
							 | 
						|
								    },
							 | 
						|
								    async getVoice(){
							 | 
						|
								      // 优先从Vuex获取音色列表
							 | 
						|
								      if (this.storeVoiceList && this.storeVoiceList.length > 0) {
							 | 
						|
								        console.log('从Vuex获取音色列表:', this.storeVoiceList);
							 | 
						|
								        this.voiceList = this.storeVoiceList;
							 | 
						|
								        return;
							 | 
						|
								      }
							 | 
						|
								      
							 | 
						|
								      // 如果Vuex中没有数据,则从API获取(兜底方案)
							 | 
						|
								      console.log('Vuex中无音色数据,从API获取...');
							 | 
						|
								      try {
							 | 
						|
								        const listRes = await this.$api.music.list()
							 | 
						|
								        if (listRes.code === 200) {
							 | 
						|
								          this.voiceList = listRes.result
							 | 
						|
								          // 更新Vuex中的音色列表
							 | 
						|
								          this.$store.commit('setVoiceList', listRes.result);
							 | 
						|
								        } else {
							 | 
						|
								          console.error('获取音色列表失败:', listRes);
							 | 
						|
								        }
							 | 
						|
								      } catch (error) {
							 | 
						|
								        console.error('获取音色列表异常:', error);
							 | 
						|
								      }
							 | 
						|
								    }
							 | 
						|
								  },
							 | 
						|
								  onLoad(options) {
							 | 
						|
								    this.selectedVoiceId = Number(options.voiceId) 
							 | 
						|
								    // console.log( 'options.voiceId', options.voiceId );
							 | 
						|
								    
							 | 
						|
								    this.getVoice()
							 | 
						|
								  }
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								</script>
							 | 
						|
								
							 | 
						|
								<style scoped lang="scss">
							 | 
						|
								.music-container {
							 | 
						|
								  background: #fff;
							 | 
						|
								  min-height: 100vh;
							 | 
						|
								  display: flex;
							 | 
						|
								  flex-direction: column;
							 | 
						|
								  padding-bottom: 120rpx;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								.voice-list {
							 | 
						|
								  flex: 1;
							 | 
						|
								  padding: 40rpx 32rpx 120rpx;
							 | 
						|
								  display: flex;
							 | 
						|
								  flex-direction: column;
							 | 
						|
								  gap: 32rpx;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								.voice-item {
							 | 
						|
								  display: flex;
							 | 
						|
								  align-items: center;
							 | 
						|
								  padding: 32rpx 0;
							 | 
						|
								  border-bottom: 4rpx solid #F8F8F8;
							 | 
						|
								  position: relative;
							 | 
						|
								  background: #F8F8F8;
							 | 
						|
								  gap: 12px;
							 | 
						|
								  opacity: 1;
							 | 
						|
								  border-radius: 8px;
							 | 
						|
								  padding: 8px;
							 | 
						|
								  transition: all 0.3s ease;
							 | 
						|
								  &:last-child {
							 | 
						|
								    border-bottom: none;
							 | 
						|
								  }
							 | 
						|
								  
							 | 
						|
								  &.selected {
							 | 
						|
								    border-bottom: 4rpx solid $primary-color;
							 | 
						|
								  }
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								.voice-avatar {
							 | 
						|
								  width: 136rpx;
							 | 
						|
								  height: 136rpx;
							 | 
						|
								  border-radius: 50%;
							 | 
						|
								  background: #666;
							 | 
						|
								  display: flex;
							 | 
						|
								  align-items: center;
							 | 
						|
								  justify-content: center;
							 | 
						|
								  // margin-right: 32rpx;
							 | 
						|
								  position: relative;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								.play-icon {
							 | 
						|
								  display: flex;
							 | 
						|
								  width: 60rpx;
							 | 
						|
								  height: 60rpx;
							 | 
						|
								  border-radius: 100rpx;
							 | 
						|
								  background: white;
							 | 
						|
								  align-items: center;
							 | 
						|
								  justify-content: center;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								.voice-info {
							 | 
						|
								  flex: 1;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								.voice-name {
							 | 
						|
								  font-family: PingFang SC;
							 | 
						|
								  font-weight: 600;
							 | 
						|
								  font-size: 36rpx;
							 | 
						|
								  color: #262626;
							 | 
						|
								  margin-bottom: 8rpx;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								.voice-desc {
							 | 
						|
								  font-family: PingFang SC;
							 | 
						|
								  font-weight: 400;
							 | 
						|
								  font-size: 28rpx;
							 | 
						|
								  color: #999;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								.selected-tag {
							 | 
						|
								  background: $primary-color;
							 | 
						|
								  color: #fff;
							 | 
						|
								  font-size: 24rpx;
							 | 
						|
								  padding: 8rpx 16rpx;
							 | 
						|
								  border-radius: 20rpx;
							 | 
						|
								  font-family: PingFang SC;
							 | 
						|
								  font-weight: 500;
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								.bottom-bar {
							 | 
						|
								  position: fixed;
							 | 
						|
								  bottom: 0;
							 | 
						|
								  left: 0;
							 | 
						|
								  right: 0;
							 | 
						|
								  background: #fff;
							 | 
						|
								  padding: 24rpx 50rpx;
							 | 
						|
								  z-index: 999;
							 | 
						|
								  border-top: 2rpx solid #F1F1F1
							 | 
						|
								}
							 | 
						|
								</style>
							 |