<template>
<zy-popup-select
v-model="visible"
:options="options"
:isNeedSelected="false"
:optionsHeight="optionsHeight"
:optionsHeightPx="optionsHeightPx"
:mask="mask"
:maxVisibleItems="maxVisibleItems"
@change="change"
@confirm="close"
@close="close"
>
</zy-popup-select>
</template>
<script>
export default {
props: {
modelValue: { type: Boolean, default: false },
options: { type: Array, required: true },
mask: { type: Boolean, default: true },
optionsHeight: { type: Number, default: 57 },
optionsHeightPx: { type: String, default: 'px' },
maxVisibleItems: { type: Number, default: 4 }
},
emits: ['update:modelValue', 'confirm'],
data() {
return {}
},
computed: {
visible() {
return this.modelValue
}
},
methods: {
close(e) {
this.$emit('update:modelValue', false)
},
change(e) {
console.log('🚀 ~ change ~ e.item.value:', e.item.value)
if (e.item.value == 'mobileImage' || e.item.value == 'mobileVideo' || e.item.value == 'mobileMix') {
this.selectImage(e.options)
} else if (e.item.value == 'cameraImage') {
this.takePhoto(e.options)
} else if (e.item.value == 'cameraVideo') {
this.recordVideo(e.options)
} else if (
e.item.value == 'messageImage' ||
e.item.value == 'messageVideo' ||
e.item.value == 'messageMix' ||
e.item.value == 'messageFile'
) {
this.messageSelected(e.options)
}
},
confirm(e) {
this.$emit('update:modelValue', false)
},
// 选择手机图片(相册)
async selectImage(options) {
try {
// await requestAlbumPermission()
const res = await new Promise((resolve, reject) => {
uni.chooseMedia({
// count: 9,
// mediaType: [options],
// sourceType: ['album'],
// maxDuration: 60,
// camera: 'back',
...options,
success(res) {
const files = res.tempFiles.map(file => ({
path: file.tempFilePath,
type: file.width ? 'local-image' : 'local-video',
size: file.size,
duration: file.duration || 0
}))
resolve(res)
this.handleSelected(files)
},
fail(err) {
reject(err)
}
})
})
return res
} catch (err) {
console.error('选择失败:', err)
}
},
async takePhoto(options) {
try {
const res = await uni.chooseImage({
// count: 1,
// sourceType: ['camera']
...options
})
const files = res.tempFilePaths.map(path => ({ path, type: 'local-image' }))
this.handleSelected(files)
} catch (err) {
console.log('用户取消或出错')
}
},
async recordVideo(options) {
try {
const res = await uni.chooseVideo({
// sourceType: ['camera'], // 只从相机录制
// compressed: true, // 是否压缩
// maxDuration: 60, // 最长60秒
// camera: 'back' // 后置摄像头
...options
})
const file = {
path: res.tempFilePath,
size: res.size,
duration: res.duration, // 视频时长(秒)
type: 'local-video'
}
this.handleSelected(file)
// 处理视频:上传、预览等
} catch (err) {
console.log('用户取消或录制失败')
}
},
async messageSelected(options) {
wx.qy.login({
success: function (res) {
if (res.code) {
//发起网络请求
console.log('TT企微小程序登录-', res)
wx.request({
url: 'https://qyapi.weixin.qq.com/cgi-bin/gettoken',
data: {
corpid: `ww89375d6c15dd0e96`,
corpsecret: `QIBK6NaGBFFWpOSY1qBTXDpe7MvtgCUTLbr0vEIOQzI`
},
success: function (res1) {
console.log('🚀 ~ onLaunch ~ res1111111111111111111:', res1)
wx.request({
url: 'https://qyapi.weixin.qq.com/cgi-bin/miniprogram/jscode2session',
data: {
access_token: res1.data['access_token'],
js_code: res['code'],
grant_type: `authorization_code`
},
success: async function (res2) {
console.log('🚀 ~ onLaunch ~ res2:', res2)
// const resa = await chooseMessageFile({
// count: 9,
// type: 'all'
// })
// console.log('🚀 ~ selectChat ~ res:', resa)
wx.qy.checkSession({
success: async function (res3) {
console.log('🚀 ~ onLaunch ~ res3:', res3)
const resa = await chooseMessageFile({
// count: 9,
// type
...options
})
this.handleSelected(resa)
},
fail: function () {
console.log(`已失效`)
}
})
}
})
}
})
} else {
console.log('登录失败!' + res.errMsg)
}
}
})
},
// 选择后的回调
handleSelected(e) {
this.$emit('update:modelValue', false)
console.log('🚀 ~ handleSelected ~ e:', e)
}
}
}
</script>
<style scoped>
.conten {
padding-top: 200px;
}
</style>
chooseMedia会把拍照摄像从手机相册选择三个选项都弹出来,我希望在当前组件调用的时候,不需要二次弹出
最新发布