From e0b2eb4443d6c174ec1cd50fb28c148c2e704fb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B2=A1=E5=A4=8D=E4=B9=A0?= <2353956224@qq.com> Date: Tue, 26 Aug 2025 13:03:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A4=8D=E5=88=B6id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/server/bigbrother/index.vue | 74 ++++++++++++++++--- src/views/server/employeebigbrother/index.vue | 58 +++++++++++++++ .../server/manageemployeebigbrother/index.vue | 56 ++++++++++++++ .../server/manageemployeehosts/index.vue | 48 ++++++++++++ src/views/server/newhosts/index.vue | 48 ++++++++++++ 5 files changed, 275 insertions(+), 9 deletions(-) diff --git a/src/views/server/bigbrother/index.vue b/src/views/server/bigbrother/index.vue index feee814..c3e74a6 100644 --- a/src/views/server/bigbrother/index.vue +++ b/src/views/server/bigbrother/index.vue @@ -108,6 +108,12 @@ v-hasPermi="['server:big-brother:export']"> 导出 + + 批量复制大哥id + + + 批量复制主播id + {{ t('newHosts.allocation') }} @@ -223,7 +229,7 @@ const queryParams = reactive({ const queryFormRef = ref() // 搜索的表单 const exportLoading = ref(false) // 导出的加载中 let dialogAllocation = ref(false)//分配弹窗 -let selectHostList = ref([]) //选中的主播列表 +let selectBigList = ref([]) //选中的主播列表 let allocationUser = ref('') //选中的分配用户 let allocationUserList = ref([ { @@ -321,29 +327,79 @@ const getAllocationList = async () => { //分配按钮操作 const handleSelectionChange = (val) => { - selectHostList.value = val - console.log(selectHostList.value) + selectBigList.value = val + console.log(selectBigList.value) } //分配确认 function AllocationFun() { console.log('分配用户', allocationUser.value) - console.log('分配主播', selectHostList.value) - if (allocationUser.value == undefined || selectHostList.value.length <= 0) { + console.log('分配主播', selectBigList.value) + if (allocationUser.value == undefined || selectBigList.value.length <= 0) { message.error('请选择分配用户和主播') return } - selectHostList.value.forEach((item) => { + selectBigList.value.forEach((item) => { item.userId = allocationUser.value; item.isAssigned = 1; }) - console.log('数组', selectHostList.value) - BigBrotherApi.Allocation(selectHostList.value).then((res) => { - message.success(`分配${selectHostList.value.length}个,成功${res}个`) + console.log('数组', selectBigList.value) + BigBrotherApi.Allocation(selectBigList.value).then((res) => { + message.success(`分配${selectBigList.value.length}个,成功${res}个`) dialogAllocation.value = false getList() }) } + +function exportAi(type) { + if (selectBigList.value.length === 0) { + ElMessage.error('请选择主播') + return + } + let data = '' + if (type == 1) { + data = selectBigList.value.map(item => item.displayId).join('\n') + } else { + data = selectBigList.value.map(item => item.hostDisplayId).join('\n') + } + + + const copyToClipboard = async (text) => { + // 优先使用 Clipboard API + if (navigator.clipboard && window.isSecureContext) { + try { + await navigator.clipboard.writeText(text) + ElMessage.success('✅ 复制成功 ' + selectBigList.value.length + ' 条数据') + } catch (err) { + ElMessage.error('❌ 复制失败') + console.error(err) + } + } else { + // fallback 兼容方案 + const textarea = document.createElement('textarea') + textarea.value = text + textarea.style.position = 'fixed' // 避免跳动 + textarea.style.opacity = '0' + document.body.appendChild(textarea) + textarea.select() + try { + const result = document.execCommand('copy') + if (result) { + ElMessage.success('✅(兼容模式)复制成功 ' + selectBigList.value.length + ' 条数据') + } else { + ElMessage.error('❌(兼容模式)复制失败') + } + } catch (err) { + ElMessage.error('❌(兼容模式)复制异常') + console.error(err) + } finally { + document.body.removeChild(textarea) + } + } + } + + copyToClipboard(data) +} /** 初始化 **/ onMounted(() => { getList() diff --git a/src/views/server/employeebigbrother/index.vue b/src/views/server/employeebigbrother/index.vue index c5a49d2..0b1939d 100644 --- a/src/views/server/employeebigbrother/index.vue +++ b/src/views/server/employeebigbrother/index.vue @@ -96,6 +96,12 @@ v-hasPermi="['server:employee-big-brother:export']"> 导出 + + 批量复制大哥id + + + 批量复制主播id + @@ -191,6 +197,7 @@ const queryParams = reactive({ createTimeEnd: '', operationStatus: undefined }) + const queryFormRef = ref() // 搜索的表单 const exportLoading = ref(false) // 导出的加载中 let selectBigList = ref([]) @@ -309,6 +316,57 @@ function openHtml(item, id) { window.open(`https://www.tiktok.com/@${id}`) } + + +function exportAi(type) { + if (selectBigList.value.length === 0) { + ElMessage.error('请选择主播') + return + } + let data = '' + if (type == 1) { + data = selectBigList.value.map(item => item.displayId).join('\n') + } else { + data = selectBigList.value.map(item => item.hostDisplayId).join('\n') + } + + + const copyToClipboard = async (text) => { + // 优先使用 Clipboard API + if (navigator.clipboard && window.isSecureContext) { + try { + await navigator.clipboard.writeText(text) + ElMessage.success('✅ 复制成功 ' + selectBigList.value.length + ' 条数据') + } catch (err) { + ElMessage.error('❌ 复制失败') + console.error(err) + } + } else { + // fallback 兼容方案 + const textarea = document.createElement('textarea') + textarea.value = text + textarea.style.position = 'fixed' // 避免跳动 + textarea.style.opacity = '0' + document.body.appendChild(textarea) + textarea.select() + try { + const result = document.execCommand('copy') + if (result) { + ElMessage.success('✅(兼容模式)复制成功 ' + selectBigList.value.length + ' 条数据') + } else { + ElMessage.error('❌(兼容模式)复制失败') + } + } catch (err) { + ElMessage.error('❌(兼容模式)复制异常') + console.error(err) + } finally { + document.body.removeChild(textarea) + } + } + } + + copyToClipboard(data) +} /** 初始化 **/ onMounted(() => { getList() diff --git a/src/views/server/manageemployeebigbrother/index.vue b/src/views/server/manageemployeebigbrother/index.vue index 6a383b8..9da422a 100644 --- a/src/views/server/manageemployeebigbrother/index.vue +++ b/src/views/server/manageemployeebigbrother/index.vue @@ -99,6 +99,12 @@ {{ t('newHosts.allocation') }} + + 批量复制大哥id + + + 批量复制主播id + @@ -347,6 +353,56 @@ function openHtml(item, id) { window.open(`https://www.tiktok.com/@${id}`) } + +function exportAi(type) { + if (selectBigList.value.length === 0) { + ElMessage.error('请选择主播') + return + } + let data = '' + if (type == 1) { + data = selectBigList.value.map(item => item.displayId).join('\n') + } else { + data = selectBigList.value.map(item => item.hostDisplayId).join('\n') + } + + + const copyToClipboard = async (text) => { + // 优先使用 Clipboard API + if (navigator.clipboard && window.isSecureContext) { + try { + await navigator.clipboard.writeText(text) + ElMessage.success('✅ 复制成功 ' + selectBigList.value.length + ' 条数据') + } catch (err) { + ElMessage.error('❌ 复制失败') + console.error(err) + } + } else { + // fallback 兼容方案 + const textarea = document.createElement('textarea') + textarea.value = text + textarea.style.position = 'fixed' // 避免跳动 + textarea.style.opacity = '0' + document.body.appendChild(textarea) + textarea.select() + try { + const result = document.execCommand('copy') + if (result) { + ElMessage.success('✅(兼容模式)复制成功 ' + selectBigList.value.length + ' 条数据') + } else { + ElMessage.error('❌(兼容模式)复制失败') + } + } catch (err) { + ElMessage.error('❌(兼容模式)复制异常') + console.error(err) + } finally { + document.body.removeChild(textarea) + } + } + } + + copyToClipboard(data) +} /** 初始化 **/ onMounted(() => { getList() diff --git a/src/views/server/manageemployeehosts/index.vue b/src/views/server/manageemployeehosts/index.vue index b1c2b5c..64d6331 100644 --- a/src/views/server/manageemployeehosts/index.vue +++ b/src/views/server/manageemployeehosts/index.vue @@ -115,6 +115,9 @@ {{ t('newHosts.allocation') }} + + {{ $t('employee.exportAi') }} + @@ -540,6 +543,51 @@ function changeCountry(region) { }) } + +function exportAi() { + if (selectHostList.value.length === 0) { + ElMessage.error('请选择主播') + return + } + + const data = selectHostList.value.map(item => item.hostsId).join('\n') + + const copyToClipboard = async (text) => { + // 优先使用 Clipboard API + if (navigator.clipboard && window.isSecureContext) { + try { + await navigator.clipboard.writeText(text) + ElMessage.success('✅ 复制成功 ' + selectHostList.value.length + ' 条数据') + } catch (err) { + ElMessage.error('❌ 复制失败') + console.error(err) + } + } else { + // fallback 兼容方案 + const textarea = document.createElement('textarea') + textarea.value = text + textarea.style.position = 'fixed' // 避免跳动 + textarea.style.opacity = '0' + document.body.appendChild(textarea) + textarea.select() + try { + const result = document.execCommand('copy') + if (result) { + ElMessage.success('✅(兼容模式)复制成功 ' + selectHostList.value.length + ' 条数据') + } else { + ElMessage.error('❌(兼容模式)复制失败') + } + } catch (err) { + ElMessage.error('❌(兼容模式)复制异常') + console.error(err) + } finally { + document.body.removeChild(textarea) + } + } + } + + copyToClipboard(data) +} // /** 初始化 **/ // onMounted(() => { // getList() diff --git a/src/views/server/newhosts/index.vue b/src/views/server/newhosts/index.vue index f94ff68..5eadb2c 100644 --- a/src/views/server/newhosts/index.vue +++ b/src/views/server/newhosts/index.vue @@ -155,6 +155,9 @@ {{ t('newHosts.allocation') }} + + {{ $t('employee.exportAi') }} + 批量删除 @@ -526,6 +529,51 @@ function changeCountry(region) { }) } + +function exportAi() { + if (selectHostList.value.length === 0) { + ElMessage.error('请选择主播') + return + } + + const data = selectHostList.value.map(item => item.hostsId).join('\n') + + const copyToClipboard = async (text) => { + // 优先使用 Clipboard API + if (navigator.clipboard && window.isSecureContext) { + try { + await navigator.clipboard.writeText(text) + ElMessage.success('✅ 复制成功 ' + selectHostList.value.length + ' 条数据') + } catch (err) { + ElMessage.error('❌ 复制失败') + console.error(err) + } + } else { + // fallback 兼容方案 + const textarea = document.createElement('textarea') + textarea.value = text + textarea.style.position = 'fixed' // 避免跳动 + textarea.style.opacity = '0' + document.body.appendChild(textarea) + textarea.select() + try { + const result = document.execCommand('copy') + if (result) { + ElMessage.success('✅(兼容模式)复制成功 ' + selectHostList.value.length + ' 条数据') + } else { + ElMessage.error('❌(兼容模式)复制失败') + } + } catch (err) { + ElMessage.error('❌(兼容模式)复制异常') + console.error(err) + } finally { + document.body.removeChild(textarea) + } + } + } + + copyToClipboard(data) +} /** 初始化 **/ onMounted(() => { getList()