parent
7932dde3b4
commit
c8a69acb84
@ -0,0 +1,319 @@ |
||||
<template> |
||||
<el-main> |
||||
|
||||
<el-row style="margin-bottom: 5px"> |
||||
<el-col :span="3"> |
||||
<el-radio-group v-model="searchfromtype"> |
||||
<el-radio-button icon="el-icon-mobile-phone" label="android"><i |
||||
class="iconfont icon-android2"/> |
||||
</el-radio-button> |
||||
<el-radio-button label="ios"><i class="iconfont icon-ios"/> |
||||
</el-radio-button> |
||||
</el-radio-group> |
||||
|
||||
</el-col> |
||||
<el-col :span="8"> |
||||
<el-row> |
||||
<el-col :span="18"> |
||||
<el-input |
||||
v-model="keysearch" |
||||
clearable |
||||
placeholder="请输入名称搜索" |
||||
@click="searchapps" |
||||
@keyup.enter.native="searchapps"> |
||||
</el-input> |
||||
</el-col> |
||||
<el-col :span="6"> |
||||
|
||||
<el-button icon="el-icon-search" @click="searchFun"> |
||||
</el-button> |
||||
</el-col> |
||||
</el-row> |
||||
</el-col> |
||||
|
||||
<el-col :offset="5" :span="8"> |
||||
<el-row> |
||||
<el-col :span="8"> |
||||
<el-checkbox v-model="checkAll" :indeterminate="isIndeterminate" style="margin-top: 10px" |
||||
@change="handleCheckAllChange">当前页全选【{{ checkedQrcodes.length }}】 |
||||
</el-checkbox> |
||||
</el-col> |
||||
<el-col :span="13" style="float: right"> |
||||
<el-button @click="savemany">批量保存选中下载码到本地</el-button> |
||||
</el-col> |
||||
</el-row> |
||||
</el-col> |
||||
</el-row> |
||||
|
||||
<el-row id="showqr"> |
||||
<el-checkbox-group v-model="checkedQrcodes" @change="handlecheckedQrcodesChange"> |
||||
<el-col v-for="appinfo in qrcode_info_list" :key="appinfo.app_id" :span="5" style="margin-left: 40px"> |
||||
<el-checkbox :label="appinfo.app_id" border style="height: 320px"> |
||||
<el-card :body-style="{textAlign:'center',padding:'8px'}" shadow="hover"> |
||||
<vue-qr :callback="qrback" |
||||
:correctLevel="qrinfo.correctLevel" :logoCornerRadius="qrinfo.logoCornerRadius" |
||||
:logoScale="qrinfo.logoScale" |
||||
:logoSrc="appinfo.master_release.icon_url" |
||||
:margin="qrinfo.margin" :qid="appinfo.app_id" |
||||
:size="200" |
||||
:text="short_url(appinfo)"> |
||||
</vue-qr> |
||||
<div style="margin: 5px 0 5px"> |
||||
<i v-if="appinfo.type === 1" class=" type-icon iconfont icon-ios"/> |
||||
<i v-if="appinfo.type === 0" class="type-icon iconfont icon-android2"/> |
||||
|
||||
<span>{{ appinfo.name }}</span> |
||||
<div class="bottom clearfix"> |
||||
<el-button plain size="small" type="primary" @click="go_download(appinfo)">预览</el-button> |
||||
<el-button plain size="small" type="primary" @click="save_qr(appinfo)">保存本地</el-button> |
||||
</div> |
||||
</div> |
||||
</el-card> |
||||
</el-checkbox> |
||||
</el-col> |
||||
</el-checkbox-group> |
||||
</el-row> |
||||
|
||||
</el-main> |
||||
</template> |
||||
|
||||
<script> |
||||
|
||||
import {qrcodeinfo} from "@/restful"; |
||||
import {getScrollHeight, getScrollTop, getUserInfoFun, getWindowHeight} from '@/utils' |
||||
import VueQr from 'vue-qr'; |
||||
|
||||
export default { |
||||
name: "FirUserQrcode", |
||||
components: { |
||||
VueQr |
||||
}, |
||||
data() { |
||||
return { |
||||
has_next: false, |
||||
firstloadflag: true, |
||||
query: {'page': 1, size: 20}, |
||||
searchflag: false, |
||||
keysearch: '', |
||||
searchfromtype: '', |
||||
loadingobj: null, |
||||
checkAll: false, |
||||
checkedQrcodes: [], |
||||
isIndeterminate: false, |
||||
allQrcodeAppid: [], |
||||
qrcode_info_list: [], |
||||
orgqrcode_info_list: [], |
||||
qrcode_img_info: {}, |
||||
qrinfo: { |
||||
logoScale: 0.3, |
||||
logoCornerRadius: 12, |
||||
correctLevel: 3, |
||||
margin: 10 |
||||
}, |
||||
} |
||||
}, |
||||
methods: { |
||||
auto_load() { |
||||
if (getScrollTop() + getWindowHeight() >= getScrollHeight()) { |
||||
if (this.has_next) { //先判断下一页是否有数据 |
||||
if (this.autoloadflag) { |
||||
this.autoloadflag = false; |
||||
if (this.qrcode_info_list.length === 0) { |
||||
this.query.page = 1; |
||||
} else { |
||||
this.query.page += 1; |
||||
} |
||||
if (this.searchfromtype !== '') { |
||||
this.query.type = this.searchfromtype; |
||||
} |
||||
this.UserQrcodeFun(this.query); |
||||
} |
||||
|
||||
} |
||||
} |
||||
}, |
||||
init_value() { |
||||
this.checkAll = false; |
||||
this.checkedQrcodes = []; |
||||
this.isIndeterminate = false; |
||||
this.qrcode_info_list = []; |
||||
this.orgqrcode_info_list = []; |
||||
this.checkedQrcodes = []; |
||||
this.allQrcodeAppid = []; |
||||
this.qrcode_img_info = {}; |
||||
}, |
||||
searchFun() { |
||||
let keysearch = this.keysearch.replace(/^\s+|\s+$/g, ""); |
||||
if (keysearch === '') { |
||||
this.searchflag = false; |
||||
this.init_value(); |
||||
this.query.page = 1; |
||||
if (this.searchfromtype) { |
||||
this.UserQrcodeFun({"type": this.searchfromtype}); |
||||
} else { |
||||
this.UserQrcodeFun({}); |
||||
} |
||||
} else { |
||||
this.searchflag = true |
||||
} |
||||
if (this.searchflag) { |
||||
this.qrcode_info_list = []; |
||||
this.orgqrcode_info_list = []; |
||||
if (this.searchfromtype) { |
||||
this.UserQrcodeFun({"type": this.searchfromtype, 'page': 1, size: 999}); |
||||
} else { |
||||
this.UserQrcodeFun({'page': 1, size: 999}); |
||||
} |
||||
} |
||||
}, |
||||
searchapps() { |
||||
let keysearch = this.keysearch.replace(/^\s+|\s+$/g, ""); |
||||
let newqrcode_info_list = []; |
||||
for (let i = 0; i < this.orgqrcode_info_list.length; i++) { |
||||
if (this.orgqrcode_info_list[i].name.search(keysearch) >= 0) { |
||||
newqrcode_info_list.push(this.orgqrcode_info_list[i]); |
||||
} |
||||
} |
||||
if (keysearch === "") { |
||||
this.qrcode_info_list = this.orgqrcode_info_list.slice(); |
||||
} else { |
||||
this.qrcode_info_list = newqrcode_info_list.slice(); |
||||
} |
||||
|
||||
}, |
||||
get_appinfo_from_appid(app_id) { |
||||
for (let i = 0; i < this.qrcode_info_list.length; i++) { |
||||
if (app_id === this.qrcode_info_list[i].app_id) { |
||||
return this.qrcode_info_list[i]; |
||||
} |
||||
} |
||||
}, |
||||
savemany() { |
||||
for (let i = 0; i < this.checkedQrcodes.length; i++) { |
||||
this.save_qr(this.get_appinfo_from_appid(this.allQrcodeAppid[i])) |
||||
} |
||||
}, |
||||
handleCheckAllChange(val) { |
||||
this.checkedQrcodes = val ? this.allQrcodeAppid : []; |
||||
this.isIndeterminate = false; |
||||
}, |
||||
handlecheckedQrcodesChange(value) { |
||||
let checkedCount = value.length; |
||||
this.checkAll = checkedCount === this.allQrcodeAppid.length; |
||||
this.isIndeterminate = checkedCount > 0 && checkedCount < this.allQrcodeAppid.length; |
||||
}, |
||||
go_download(appinfo) { |
||||
let routeData = this.$router.resolve({name: 'FirDownload', params: {short: appinfo.short}}); |
||||
let p_url = routeData.href; |
||||
if (appinfo.preview_url && appinfo.preview_url.length > 6) { |
||||
p_url = appinfo.preview_url + p_url |
||||
} |
||||
window.open(p_url, '_blank', ''); |
||||
}, |
||||
qrback(dataUrl, id) { |
||||
this.qrcode_img_info[id] = dataUrl; |
||||
this.allQrcodeAppid.push(id); |
||||
}, |
||||
short_url(appinfo) { |
||||
const userinfo = this.$store.state.userinfo; |
||||
if (userinfo.qrcode_domain_name && userinfo.qrcode_domain_name.length > 3) { |
||||
return 'http://' + userinfo.qrcode_domain_name + '/' + appinfo.short; |
||||
} |
||||
return appinfo.preview_url; |
||||
}, |
||||
save_qr(appinfo) { |
||||
let dtype = "I"; |
||||
if (appinfo.master_release.release_type === 0) { |
||||
dtype = "A"; |
||||
} |
||||
let a = document.createElement('a'); |
||||
// 下载图名字 |
||||
a.download = appinfo.name + '_' + dtype + "_下载码"; |
||||
a.href = this.qrcode_img_info[appinfo.app_id]; |
||||
//合成函数,执行下载 |
||||
a.dispatchEvent(new MouseEvent('click')) |
||||
}, |
||||
UserQrcodeFun(params) { |
||||
this.loadingobj = this.$loading({ |
||||
lock: true, |
||||
text: '加载中', |
||||
spinner: 'el-icon-loading', |
||||
// background: 'rgba(0, 0, 0, 0.7)' |
||||
}); |
||||
qrcodeinfo(data => { |
||||
if (data.code === 1000) { |
||||
if (this.firstloadflag) { |
||||
window.addEventListener('scroll', this.auto_load); |
||||
this.firstloadflag = false |
||||
} |
||||
this.autoloadflag = true; |
||||
this.qrcode_info_list = this.qrcode_info_list.concat(data.data); |
||||
this.has_next = data.has_next; |
||||
this.orgqrcode_info_list = this.qrcode_info_list.slice(); //深拷贝 |
||||
this.hdata = data.hdata; |
||||
this.searchapps(); |
||||
|
||||
} else { |
||||
this.$message.error("信息获取失败") |
||||
} |
||||
this.loadingobj.close(); |
||||
}, {methods: 'GET', data: params}) |
||||
}, |
||||
|
||||
|
||||
}, mounted() { |
||||
getUserInfoFun(this); |
||||
this.UserQrcodeFun() |
||||
}, |
||||
watch: { |
||||
|
||||
// eslint-disable-next-line no-unused-vars |
||||
keysearch: function (val, oldVal) { |
||||
// this.searchapps() |
||||
let keysearch = this.keysearch.replace(/^\s+|\s+$/g, ""); |
||||
if (keysearch === "") { |
||||
this.searchFun() |
||||
} |
||||
}, |
||||
// eslint-disable-next-line no-unused-vars |
||||
searchfromtype: function (val, oldVal) { |
||||
this.qrcode_info_list = []; |
||||
this.query.page = 1; |
||||
// this.keysearch=''; |
||||
this.searchFun(); |
||||
// this.getappsFun({"type": this.searchfromtype}); |
||||
}, |
||||
} |
||||
} |
||||
</script> |
||||
|
||||
<style scoped> |
||||
.el-main { |
||||
margin: 20px auto 100px; |
||||
width: 1166px; |
||||
position: relative; |
||||
padding-bottom: 1px; |
||||
color: #9b9b9b; |
||||
-webkit-font-smoothing: antialiased; |
||||
border-radius: 1%; |
||||
} |
||||
|
||||
.bottom { |
||||
margin-top: 10px; |
||||
} |
||||
|
||||
.clearfix:before, |
||||
.clearfix:after { |
||||
display: table; |
||||
content: ""; |
||||
} |
||||
|
||||
.clearfix:after { |
||||
clear: both |
||||
} |
||||
|
||||
#showqr /deep/ .el-checkbox__input { |
||||
display: none; |
||||
} |
||||
|
||||
</style> |
Loading…
Reference in new issue