|  | @@ -1,228 +1,228 @@
 | 
	
		
			
				|  |  | -import { defineComponent, reactive } from 'vue'
 | 
	
		
			
				|  |  | -import { ElButton, ElDropdown, ElDropdownMenu, ElDropdownItem, ElSlider, ElDialog, ElIcon } from 'element-plus'
 | 
	
		
			
				|  |  | -import runtime, * as RuntimeUtils from './runtime'
 | 
	
		
			
				|  |  | -import styles from './action-bar.module.less'
 | 
	
		
			
				|  |  | -import Share from './share'
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -export const state = reactive({
 | 
	
		
			
				|  |  | -  volume: 30,
 | 
	
		
			
				|  |  | -  barStatus: {
 | 
	
		
			
				|  |  | -    camera: false, // 摄像头
 | 
	
		
			
				|  |  | -    volume: false, // 声音调节
 | 
	
		
			
				|  |  | -    microphone: false, // 麦克风
 | 
	
		
			
				|  |  | -    screen: false, // 共享屏幕
 | 
	
		
			
				|  |  | -    share: false, // 分享
 | 
	
		
			
				|  |  | -  },
 | 
	
		
			
				|  |  | -  shareVisiable: false
 | 
	
		
			
				|  |  | -})
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -export default defineComponent({
 | 
	
		
			
				|  |  | -  name: 'LiveBroadcast-ActionBar',
 | 
	
		
			
				|  |  | -  computed: {
 | 
	
		
			
				|  |  | -    isCameraDisabled() {
 | 
	
		
			
				|  |  | -      return state.barStatus.camera && runtime.deviceStatus.camera !== 'denied' && runtime.cameras.length
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    isMicrophoneDisabled() {
 | 
	
		
			
				|  |  | -      const isDisabled = state.barStatus.microphone && runtime.deviceStatus.microphone !== 'denied' && runtime.microphones.length
 | 
	
		
			
				|  |  | -      return isDisabled
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    isVolumeDisabled() {
 | 
	
		
			
				|  |  | -      return state.volume === 0
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  },
 | 
	
		
			
				|  |  | -  mounted() {
 | 
	
		
			
				|  |  | -    console.log(runtime.cameras, runtime.cameras.length)
 | 
	
		
			
				|  |  | -  },
 | 
	
		
			
				|  |  | -  methods: {
 | 
	
		
			
				|  |  | -    startShare() {
 | 
	
		
			
				|  |  | -      console.log('调用')
 | 
	
		
			
				|  |  | -      state.shareVisiable = true
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    volumeChange(value: number) {
 | 
	
		
			
				|  |  | -      state.volume = value
 | 
	
		
			
				|  |  | -      RuntimeUtils.setVolume(value)
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  },
 | 
	
		
			
				|  |  | -  render() {
 | 
	
		
			
				|  |  | -    return (
 | 
	
		
			
				|  |  | -      <div class={styles['action-bar']} id="action-bar">
 | 
	
		
			
				|  |  | -        <div style={{ display: 'flex' }}>
 | 
	
		
			
				|  |  | -          <div class={styles['bar-btn']}>
 | 
	
		
			
				|  |  | -            <div class={styles.btnInner}>
 | 
	
		
			
				|  |  | -              <SvgIcon
 | 
	
		
			
				|  |  | -                onClick={() => {
 | 
	
		
			
				|  |  | -                  state.barStatus.camera = !state.barStatus.camera
 | 
	
		
			
				|  |  | -                  RuntimeUtils.toggleDevice('camera')
 | 
	
		
			
				|  |  | -                }}
 | 
	
		
			
				|  |  | -                name={this.isCameraDisabled ? 'bar-camera-disabled' : 'bar-camera'}
 | 
	
		
			
				|  |  | -                style={{
 | 
	
		
			
				|  |  | -                  width: '22px',
 | 
	
		
			
				|  |  | -                  cursor: 'pointer'
 | 
	
		
			
				|  |  | -                }}
 | 
	
		
			
				|  |  | -              />
 | 
	
		
			
				|  |  | -              { runtime.cameras.length === 0 ? null : <ElDropdown
 | 
	
		
			
				|  |  | -                placement="top"
 | 
	
		
			
				|  |  | -                // @ts-ignore
 | 
	
		
			
				|  |  | -                disabled={runtime.cameras.length === 0}
 | 
	
		
			
				|  |  | -                onCommand={RuntimeUtils.setSelectCamera}
 | 
	
		
			
				|  |  | -                // @ts-ignore
 | 
	
		
			
				|  |  | -                vSlots={{
 | 
	
		
			
				|  |  | -                  dropdown: () => (
 | 
	
		
			
				|  |  | -                    <ElDropdownMenu>
 | 
	
		
			
				|  |  | -                      {runtime.cameras.map(item => (<ElDropdownItem disabled={item === runtime.selectedCamera} command={item}>{item.label}</ElDropdownItem>))}
 | 
	
		
			
				|  |  | -                    </ElDropdownMenu>
 | 
	
		
			
				|  |  | -                  )
 | 
	
		
			
				|  |  | -                }}
 | 
	
		
			
				|  |  | -              >
 | 
	
		
			
				|  |  | -                <div class={styles['bar-btn']} style={{ height: '32px' }}>
 | 
	
		
			
				|  |  | -                  <SvgIcon
 | 
	
		
			
				|  |  | -                    name="bar-arrow-down"
 | 
	
		
			
				|  |  | -                    style={{
 | 
	
		
			
				|  |  | -                      width: '18px'
 | 
	
		
			
				|  |  | -                    }}
 | 
	
		
			
				|  |  | -                  />
 | 
	
		
			
				|  |  | -                </div>
 | 
	
		
			
				|  |  | -              </ElDropdown> }
 | 
	
		
			
				|  |  | -            </div>
 | 
	
		
			
				|  |  | -            <span class={styles['bar-btn-text']}>摄像头</span>
 | 
	
		
			
				|  |  | -          </div>
 | 
	
		
			
				|  |  | -          <div class={styles['bar-btn']}>
 | 
	
		
			
				|  |  | -            <div class={styles.btnInner}>
 | 
	
		
			
				|  |  | -              <SvgIcon
 | 
	
		
			
				|  |  | -                onClick={() => {
 | 
	
		
			
				|  |  | -                  state.barStatus.volume = !state.barStatus.volume;
 | 
	
		
			
				|  |  | -                  if(!state.barStatus.volume) {
 | 
	
		
			
				|  |  | -                    sessionStorage.getItem('volume') && this.volumeChange(Number(sessionStorage.getItem('volume')))
 | 
	
		
			
				|  |  | -                  } else {
 | 
	
		
			
				|  |  | -                    sessionStorage.setItem('volume', state.volume.toString())
 | 
	
		
			
				|  |  | -                    this.volumeChange(0)
 | 
	
		
			
				|  |  | -                  }
 | 
	
		
			
				|  |  | -                }}
 | 
	
		
			
				|  |  | -                name={this.isVolumeDisabled ? 'bar-volume-disabled' : 'bar-volume'}
 | 
	
		
			
				|  |  | -                style={{
 | 
	
		
			
				|  |  | -                  width: '22px',
 | 
	
		
			
				|  |  | -                  cursor: 'pointer'
 | 
	
		
			
				|  |  | -                }}
 | 
	
		
			
				|  |  | -              />
 | 
	
		
			
				|  |  | -              <ElDropdown
 | 
	
		
			
				|  |  | -                placement="top-start"
 | 
	
		
			
				|  |  | -                popper-options={{ boundariesElement: '#action-bar', gpuAcceleration: false }}
 | 
	
		
			
				|  |  | -                // @ts-ignore
 | 
	
		
			
				|  |  | -                vSlots={{
 | 
	
		
			
				|  |  | -                  dropdown: () => (
 | 
	
		
			
				|  |  | -                    <div class={styles.volumeSlider}>
 | 
	
		
			
				|  |  | -                      <SvgIcon class={styles.volumeIcon} name="message-voice" color="#fff" />
 | 
	
		
			
				|  |  | -                      <ElSlider modelValue={state.volume} onInput={this.volumeChange} size="small" />
 | 
	
		
			
				|  |  | -                    </div>
 | 
	
		
			
				|  |  | -                  )
 | 
	
		
			
				|  |  | -                }}
 | 
	
		
			
				|  |  | -              >
 | 
	
		
			
				|  |  | -                <div class={styles['bar-btn']} style={{ height: '32px' }}>
 | 
	
		
			
				|  |  | -                  <SvgIcon
 | 
	
		
			
				|  |  | -                    name="bar-arrow-down"
 | 
	
		
			
				|  |  | -                    style={{
 | 
	
		
			
				|  |  | -                      width: '18px'
 | 
	
		
			
				|  |  | -                    }}
 | 
	
		
			
				|  |  | -                  />
 | 
	
		
			
				|  |  | -                </div>
 | 
	
		
			
				|  |  | -              </ElDropdown>
 | 
	
		
			
				|  |  | -            </div>
 | 
	
		
			
				|  |  | -            <span class={styles['bar-btn-text']}>音量调节</span>
 | 
	
		
			
				|  |  | -          </div>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -          <div class={styles['bar-btn']} onClick={RuntimeUtils.shareScreenVideo}>
 | 
	
		
			
				|  |  | -            <div class={styles.btnInner}>
 | 
	
		
			
				|  |  | -              <SvgIcon
 | 
	
		
			
				|  |  | -                name="bar-screen-share"
 | 
	
		
			
				|  |  | -                style={{
 | 
	
		
			
				|  |  | -                  width: '22px',
 | 
	
		
			
				|  |  | -                  cursor: 'pointer'
 | 
	
		
			
				|  |  | -                }}
 | 
	
		
			
				|  |  | -              />
 | 
	
		
			
				|  |  | -            </div>
 | 
	
		
			
				|  |  | -            <span class={styles['bar-btn-text']}>屏幕共享</span>
 | 
	
		
			
				|  |  | -          </div>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -          {/* <div class={styles['bar-btn']} >
 | 
	
		
			
				|  |  | -            <div class={styles.btnInner}>
 | 
	
		
			
				|  |  | -              <SvgIcon
 | 
	
		
			
				|  |  | -                name="bar-beauty"
 | 
	
		
			
				|  |  | -                style={{
 | 
	
		
			
				|  |  | -                  width: '22px',
 | 
	
		
			
				|  |  | -                  cursor: 'pointer'
 | 
	
		
			
				|  |  | -                }}
 | 
	
		
			
				|  |  | -              />
 | 
	
		
			
				|  |  | -            </div>
 | 
	
		
			
				|  |  | -            <span class={styles['bar-btn-text']}>美颜</span>
 | 
	
		
			
				|  |  | -          </div> */}
 | 
	
		
			
				|  |  | -          <div class={styles['bar-btn']}>
 | 
	
		
			
				|  |  | -            <div class={styles.btnInner}>
 | 
	
		
			
				|  |  | -              <SvgIcon
 | 
	
		
			
				|  |  | -                onClick={() => {
 | 
	
		
			
				|  |  | -                  const needPublish = runtime.videoStatus === 'liveing'
 | 
	
		
			
				|  |  | -                  state.barStatus.microphone = !state.barStatus.microphone
 | 
	
		
			
				|  |  | -                  if (!state.barStatus.microphone) {
 | 
	
		
			
				|  |  | -                    RuntimeUtils.openDevice('microphone', needPublish)
 | 
	
		
			
				|  |  | -                  } else {
 | 
	
		
			
				|  |  | -                    RuntimeUtils.closeDevice('microphone', needPublish)
 | 
	
		
			
				|  |  | -                  }
 | 
	
		
			
				|  |  | -                }}
 | 
	
		
			
				|  |  | -                name={this.isMicrophoneDisabled ? 'bar-mike-disabled' : 'bar-mike'}
 | 
	
		
			
				|  |  | -                style={{
 | 
	
		
			
				|  |  | -                  width: '22px',
 | 
	
		
			
				|  |  | -                  cursor: 'pointer'
 | 
	
		
			
				|  |  | -                }}
 | 
	
		
			
				|  |  | -              />
 | 
	
		
			
				|  |  | -              { runtime.microphones.length === 0 ? null : <ElDropdown
 | 
	
		
			
				|  |  | -                placement="top-start"
 | 
	
		
			
				|  |  | -                // @ts-ignore
 | 
	
		
			
				|  |  | -                disabled={runtime.microphones.length === 0}
 | 
	
		
			
				|  |  | -                popper-options={{ boundariesElement: '#action-bar', gpuAcceleration: false }}
 | 
	
		
			
				|  |  | -                onCommand={RuntimeUtils.setSelectMicrophone}
 | 
	
		
			
				|  |  | -                // @ts-ignore
 | 
	
		
			
				|  |  | -                vSlots={{
 | 
	
		
			
				|  |  | -                  dropdown: () => (
 | 
	
		
			
				|  |  | -                    <ElDropdownMenu>
 | 
	
		
			
				|  |  | -                      {runtime.microphones.map(item => (<ElDropdownItem disabled={item === runtime.selectedMicrophone} command={item}>{item.label}</ElDropdownItem>))}
 | 
	
		
			
				|  |  | -                    </ElDropdownMenu>
 | 
	
		
			
				|  |  | -                  )
 | 
	
		
			
				|  |  | -                }}
 | 
	
		
			
				|  |  | -              >
 | 
	
		
			
				|  |  | -                <div class={styles['bar-btn']} style={{ height: '32px' }}>
 | 
	
		
			
				|  |  | -                  <SvgIcon
 | 
	
		
			
				|  |  | -                    name="bar-arrow-down"
 | 
	
		
			
				|  |  | -                    style={{
 | 
	
		
			
				|  |  | -                      width: '18px'
 | 
	
		
			
				|  |  | -                    }}
 | 
	
		
			
				|  |  | -                  />
 | 
	
		
			
				|  |  | -                </div>
 | 
	
		
			
				|  |  | -              </ElDropdown>}
 | 
	
		
			
				|  |  | -            </div>
 | 
	
		
			
				|  |  | -            <span class={styles['bar-btn-text']}>麦克风</span>
 | 
	
		
			
				|  |  | -          </div>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        </div>
 | 
	
		
			
				|  |  | -        <div style={{ display: 'flex' }} onClick={this.startShare}>
 | 
	
		
			
				|  |  | -          <div class={styles['bar-btn']} >
 | 
	
		
			
				|  |  | -            <div class={styles.btnInner}>
 | 
	
		
			
				|  |  | -              <SvgIcon
 | 
	
		
			
				|  |  | -                name="bar-share"
 | 
	
		
			
				|  |  | -                style={{
 | 
	
		
			
				|  |  | -                  width: '22px',
 | 
	
		
			
				|  |  | -                  cursor: 'pointer'
 | 
	
		
			
				|  |  | -                }}
 | 
	
		
			
				|  |  | -              />
 | 
	
		
			
				|  |  | -            </div>
 | 
	
		
			
				|  |  | -            <span class={styles['bar-btn-text']} >分享</span>
 | 
	
		
			
				|  |  | -          </div>
 | 
	
		
			
				|  |  | -        </div>
 | 
	
		
			
				|  |  | -        {/* <ElButton onClick={RuntimeUtils.shareScreenVideo}>屏幕共享</ElButton> */}
 | 
	
		
			
				|  |  | -        <ElDialog width="510px"
 | 
	
		
			
				|  |  | -        destroy-on-close
 | 
	
		
			
				|  |  | -          append-to-body modelValue={state.shareVisiable} title="分享" before-close={() => { state.shareVisiable = false }}>
 | 
	
		
			
				|  |  | -            <Share onClose={()=>state.shareVisiable = false}/>
 | 
	
		
			
				|  |  | -        </ElDialog>
 | 
	
		
			
				|  |  | -      </div>
 | 
	
		
			
				|  |  | -    )
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -})
 | 
	
		
			
				|  |  | +import { defineComponent, reactive } from 'vue'
 | 
	
		
			
				|  |  | +import { ElButton, ElDropdown, ElDropdownMenu, ElDropdownItem, ElSlider, ElDialog, ElIcon } from 'element-plus'
 | 
	
		
			
				|  |  | +import runtime, * as RuntimeUtils from './runtime'
 | 
	
		
			
				|  |  | +import styles from './action-bar.module.less'
 | 
	
		
			
				|  |  | +import Share from './share'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export const state = reactive({
 | 
	
		
			
				|  |  | +  volume: 0,
 | 
	
		
			
				|  |  | +  barStatus: {
 | 
	
		
			
				|  |  | +    camera: false, // 摄像头
 | 
	
		
			
				|  |  | +    volume: false, // 声音调节
 | 
	
		
			
				|  |  | +    microphone: false, // 麦克风
 | 
	
		
			
				|  |  | +    screen: false, // 共享屏幕
 | 
	
		
			
				|  |  | +    share: false, // 分享
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  shareVisiable: false
 | 
	
		
			
				|  |  | +})
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export default defineComponent({
 | 
	
		
			
				|  |  | +  name: 'LiveBroadcast-ActionBar',
 | 
	
		
			
				|  |  | +  computed: {
 | 
	
		
			
				|  |  | +    isCameraDisabled() {
 | 
	
		
			
				|  |  | +      return state.barStatus.camera && runtime.deviceStatus.camera !== 'denied' && runtime.cameras.length
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    isMicrophoneDisabled() {
 | 
	
		
			
				|  |  | +      const isDisabled = state.barStatus.microphone && runtime.deviceStatus.microphone !== 'denied' && runtime.microphones.length
 | 
	
		
			
				|  |  | +      return isDisabled
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    isVolumeDisabled() {
 | 
	
		
			
				|  |  | +      return state.volume === 0
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  mounted() {
 | 
	
		
			
				|  |  | +    console.log(runtime.cameras, runtime.cameras.length)
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  methods: {
 | 
	
		
			
				|  |  | +    startShare() {
 | 
	
		
			
				|  |  | +      console.log('调用')
 | 
	
		
			
				|  |  | +      state.shareVisiable = true
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    volumeChange(value: number) {
 | 
	
		
			
				|  |  | +      state.volume = value
 | 
	
		
			
				|  |  | +      RuntimeUtils.setVolume(value)
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  render() {
 | 
	
		
			
				|  |  | +    return (
 | 
	
		
			
				|  |  | +      <div class={styles['action-bar']} id="action-bar">
 | 
	
		
			
				|  |  | +        <div style={{ display: 'flex' }}>
 | 
	
		
			
				|  |  | +          <div class={styles['bar-btn']}>
 | 
	
		
			
				|  |  | +            <div class={styles.btnInner}>
 | 
	
		
			
				|  |  | +              <SvgIcon
 | 
	
		
			
				|  |  | +                onClick={() => {
 | 
	
		
			
				|  |  | +                  state.barStatus.camera = !state.barStatus.camera
 | 
	
		
			
				|  |  | +                  RuntimeUtils.toggleDevice('camera')
 | 
	
		
			
				|  |  | +                }}
 | 
	
		
			
				|  |  | +                name={this.isCameraDisabled ? 'bar-camera-disabled' : 'bar-camera'}
 | 
	
		
			
				|  |  | +                style={{
 | 
	
		
			
				|  |  | +                  width: '22px',
 | 
	
		
			
				|  |  | +                  cursor: 'pointer'
 | 
	
		
			
				|  |  | +                }}
 | 
	
		
			
				|  |  | +              />
 | 
	
		
			
				|  |  | +              { runtime.cameras.length === 0 ? null : <ElDropdown
 | 
	
		
			
				|  |  | +                placement="top"
 | 
	
		
			
				|  |  | +                // @ts-ignore
 | 
	
		
			
				|  |  | +                disabled={runtime.cameras.length === 0}
 | 
	
		
			
				|  |  | +                onCommand={RuntimeUtils.setSelectCamera}
 | 
	
		
			
				|  |  | +                // @ts-ignore
 | 
	
		
			
				|  |  | +                vSlots={{
 | 
	
		
			
				|  |  | +                  dropdown: () => (
 | 
	
		
			
				|  |  | +                    <ElDropdownMenu>
 | 
	
		
			
				|  |  | +                      {runtime.cameras.map(item => (<ElDropdownItem disabled={item === runtime.selectedCamera} command={item}>{item.label}</ElDropdownItem>))}
 | 
	
		
			
				|  |  | +                    </ElDropdownMenu>
 | 
	
		
			
				|  |  | +                  )
 | 
	
		
			
				|  |  | +                }}
 | 
	
		
			
				|  |  | +              >
 | 
	
		
			
				|  |  | +                <div class={styles['bar-btn']} style={{ height: '32px' }}>
 | 
	
		
			
				|  |  | +                  <SvgIcon
 | 
	
		
			
				|  |  | +                    name="bar-arrow-down"
 | 
	
		
			
				|  |  | +                    style={{
 | 
	
		
			
				|  |  | +                      width: '18px'
 | 
	
		
			
				|  |  | +                    }}
 | 
	
		
			
				|  |  | +                  />
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +              </ElDropdown> }
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +            <span class={styles['bar-btn-text']}>摄像头</span>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +          {/* <div class={styles['bar-btn']}>
 | 
	
		
			
				|  |  | +            <div class={styles.btnInner}>
 | 
	
		
			
				|  |  | +              <SvgIcon
 | 
	
		
			
				|  |  | +                onClick={() => {
 | 
	
		
			
				|  |  | +                  state.barStatus.volume = !state.barStatus.volume;
 | 
	
		
			
				|  |  | +                  if(!state.barStatus.volume) {
 | 
	
		
			
				|  |  | +                    sessionStorage.getItem('volume') && this.volumeChange(Number(sessionStorage.getItem('volume')))
 | 
	
		
			
				|  |  | +                  } else {
 | 
	
		
			
				|  |  | +                    sessionStorage.setItem('volume', state.volume.toString())
 | 
	
		
			
				|  |  | +                    this.volumeChange(0)
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                }}
 | 
	
		
			
				|  |  | +                name={this.isVolumeDisabled ? 'bar-volume-disabled' : 'bar-volume'}
 | 
	
		
			
				|  |  | +                style={{
 | 
	
		
			
				|  |  | +                  width: '22px',
 | 
	
		
			
				|  |  | +                  cursor: 'pointer'
 | 
	
		
			
				|  |  | +                }}
 | 
	
		
			
				|  |  | +              />
 | 
	
		
			
				|  |  | +              <ElDropdown
 | 
	
		
			
				|  |  | +                placement="top-start"
 | 
	
		
			
				|  |  | +                popper-options={{ boundariesElement: '#action-bar', gpuAcceleration: false }}
 | 
	
		
			
				|  |  | +                // @ts-ignore
 | 
	
		
			
				|  |  | +                vSlots={{
 | 
	
		
			
				|  |  | +                  dropdown: () => (
 | 
	
		
			
				|  |  | +                    <div class={styles.volumeSlider}>
 | 
	
		
			
				|  |  | +                      <SvgIcon class={styles.volumeIcon} name="message-voice" color="#fff" />
 | 
	
		
			
				|  |  | +                      <ElSlider modelValue={state.volume} onInput={this.volumeChange} size="small" />
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +                  )
 | 
	
		
			
				|  |  | +                }}
 | 
	
		
			
				|  |  | +              >
 | 
	
		
			
				|  |  | +                <div class={styles['bar-btn']} style={{ height: '32px' }}>
 | 
	
		
			
				|  |  | +                  <SvgIcon
 | 
	
		
			
				|  |  | +                    name="bar-arrow-down"
 | 
	
		
			
				|  |  | +                    style={{
 | 
	
		
			
				|  |  | +                      width: '18px'
 | 
	
		
			
				|  |  | +                    }}
 | 
	
		
			
				|  |  | +                  />
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +              </ElDropdown>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +            <span class={styles['bar-btn-text']}>音量调节</span>
 | 
	
		
			
				|  |  | +          </div> */}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          <div class={styles['bar-btn']} onClick={RuntimeUtils.shareScreenVideo}>
 | 
	
		
			
				|  |  | +            <div class={styles.btnInner}>
 | 
	
		
			
				|  |  | +              <SvgIcon
 | 
	
		
			
				|  |  | +                name="bar-screen-share"
 | 
	
		
			
				|  |  | +                style={{
 | 
	
		
			
				|  |  | +                  width: '22px',
 | 
	
		
			
				|  |  | +                  cursor: 'pointer'
 | 
	
		
			
				|  |  | +                }}
 | 
	
		
			
				|  |  | +              />
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +            <span class={styles['bar-btn-text']}>屏幕共享</span>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          {/* <div class={styles['bar-btn']} >
 | 
	
		
			
				|  |  | +            <div class={styles.btnInner}>
 | 
	
		
			
				|  |  | +              <SvgIcon
 | 
	
		
			
				|  |  | +                name="bar-beauty"
 | 
	
		
			
				|  |  | +                style={{
 | 
	
		
			
				|  |  | +                  width: '22px',
 | 
	
		
			
				|  |  | +                  cursor: 'pointer'
 | 
	
		
			
				|  |  | +                }}
 | 
	
		
			
				|  |  | +              />
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +            <span class={styles['bar-btn-text']}>美颜</span>
 | 
	
		
			
				|  |  | +          </div> */}
 | 
	
		
			
				|  |  | +          <div class={styles['bar-btn']}>
 | 
	
		
			
				|  |  | +            <div class={styles.btnInner}>
 | 
	
		
			
				|  |  | +              <SvgIcon
 | 
	
		
			
				|  |  | +                onClick={() => {
 | 
	
		
			
				|  |  | +                  const needPublish = runtime.videoStatus === 'liveing'
 | 
	
		
			
				|  |  | +                  state.barStatus.microphone = !state.barStatus.microphone
 | 
	
		
			
				|  |  | +                  if (!state.barStatus.microphone) {
 | 
	
		
			
				|  |  | +                    RuntimeUtils.openDevice('microphone', needPublish)
 | 
	
		
			
				|  |  | +                  } else {
 | 
	
		
			
				|  |  | +                    RuntimeUtils.closeDevice('microphone', needPublish)
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                }}
 | 
	
		
			
				|  |  | +                name={this.isMicrophoneDisabled ? 'bar-mike-disabled' : 'bar-mike'}
 | 
	
		
			
				|  |  | +                style={{
 | 
	
		
			
				|  |  | +                  width: '22px',
 | 
	
		
			
				|  |  | +                  cursor: 'pointer'
 | 
	
		
			
				|  |  | +                }}
 | 
	
		
			
				|  |  | +              />
 | 
	
		
			
				|  |  | +              { runtime.microphones.length === 0 ? null : <ElDropdown
 | 
	
		
			
				|  |  | +                placement="top-start"
 | 
	
		
			
				|  |  | +                // @ts-ignore
 | 
	
		
			
				|  |  | +                disabled={runtime.microphones.length === 0}
 | 
	
		
			
				|  |  | +                popper-options={{ boundariesElement: '#action-bar', gpuAcceleration: false }}
 | 
	
		
			
				|  |  | +                onCommand={RuntimeUtils.setSelectMicrophone}
 | 
	
		
			
				|  |  | +                // @ts-ignore
 | 
	
		
			
				|  |  | +                vSlots={{
 | 
	
		
			
				|  |  | +                  dropdown: () => (
 | 
	
		
			
				|  |  | +                    <ElDropdownMenu>
 | 
	
		
			
				|  |  | +                      {runtime.microphones.map(item => (<ElDropdownItem disabled={item === runtime.selectedMicrophone} command={item}>{item.label}</ElDropdownItem>))}
 | 
	
		
			
				|  |  | +                    </ElDropdownMenu>
 | 
	
		
			
				|  |  | +                  )
 | 
	
		
			
				|  |  | +                }}
 | 
	
		
			
				|  |  | +              >
 | 
	
		
			
				|  |  | +                <div class={styles['bar-btn']} style={{ height: '32px' }}>
 | 
	
		
			
				|  |  | +                  <SvgIcon
 | 
	
		
			
				|  |  | +                    name="bar-arrow-down"
 | 
	
		
			
				|  |  | +                    style={{
 | 
	
		
			
				|  |  | +                      width: '18px'
 | 
	
		
			
				|  |  | +                    }}
 | 
	
		
			
				|  |  | +                  />
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +              </ElDropdown>}
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +            <span class={styles['bar-btn-text']}>麦克风</span>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +        <div style={{ display: 'flex' }} onClick={this.startShare}>
 | 
	
		
			
				|  |  | +          <div class={styles['bar-btn']} >
 | 
	
		
			
				|  |  | +            <div class={styles.btnInner}>
 | 
	
		
			
				|  |  | +              <SvgIcon
 | 
	
		
			
				|  |  | +                name="bar-share"
 | 
	
		
			
				|  |  | +                style={{
 | 
	
		
			
				|  |  | +                  width: '22px',
 | 
	
		
			
				|  |  | +                  cursor: 'pointer'
 | 
	
		
			
				|  |  | +                }}
 | 
	
		
			
				|  |  | +              />
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +            <span class={styles['bar-btn-text']} >分享</span>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +        {/* <ElButton onClick={RuntimeUtils.shareScreenVideo}>屏幕共享</ElButton> */}
 | 
	
		
			
				|  |  | +        <ElDialog width="510px"
 | 
	
		
			
				|  |  | +        destroy-on-close
 | 
	
		
			
				|  |  | +          append-to-body modelValue={state.shareVisiable} title="分享" before-close={() => { state.shareVisiable = false }}>
 | 
	
		
			
				|  |  | +            <Share onClose={()=>state.shareVisiable = false}/>
 | 
	
		
			
				|  |  | +        </ElDialog>
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +    )
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +})
 |