Files
tekelanew_acs/acs/nladmin-ui/node_modules/vue-print-nb/src/App.vue

311 lines
8.7 KiB
Vue
Raw Normal View History

2024-12-03 17:40:13 +08:00
<template>
<div id="app">
<div id="loading"></div>
<h3 style="text-align: left;margin-left: 30px;">支持的打印方式:</h3>
<el-divider><i class="el-icon-printer"></i></el-divider>
<el-row :gutter="20">
<el-col :span="8">
<el-button type="primary"
icon="el-icon-printer"
v-print>全局打印</el-button>
<el-card class="box-card">
对当前页面全部进行打印
</el-card>
</el-col>
</el-row>
<el-divider><i class="el-icon-printer"></i></el-divider>
<el-row :gutter="20">
<el-col :span="8">
<el-button type="primary"
icon="el-icon-magic-stick"
v-print="'#printMe'">局部打印(快速)</el-button>
<el-card class="box-card">
可以打印页面某部分内容直接传入对应的唯一标识ID
</el-card>
</el-col>
<el-col :span="8">
<el-button type="primary"
icon="el-icon-umbrella"
v-print="printObj">局部打印(对象配置)</el-button>
<el-card class="box-card">
也许你会需要一些配置可接收一个对象根据文档API进行设置
</el-card>
</el-col>
</el-row>
<el-divider><i class="el-icon-printer"></i></el-divider>
<el-row :gutter="20">
<el-col :span="8">
<el-button type="primary"
icon="el-icon-bank-card"
v-print="printUrl">预览网址</el-button>
<el-card class="box-card">
我需要打印指定的网址(要符合同源策略) 需要传入一个对象详细看文档API进行设置
</el-card>
</el-col>
<el-col :span="8">
<el-button type="primary"
icon="el-icon-wallet"
v-print="printAsyncUrl">预览网址(异步)</el-button>
<el-card class="box-card">
你打印的网址(URL)也是可以通过异步得到的
</el-card>
异步获取URL:<el-progress :text-inside="true" :stroke-width="20" :percentage="times"></el-progress>
</el-col>
</el-row>
<div>
<el-divider><i class="el-icon-printer"></i></el-divider>
<div class="asyncTips">
</div>
<div class="box"
v-show="printLoading">
<div class="loader-04"></div>
正在处理...请稍等
</div>
<h3 style="text-align: left;margin-left: 30px;">下面是被打印的例子:</h3>
<div id="printMe"
style="background: #dac9c9">
<div ref="qrcode"></div>
<div ref="echartMain"
:style="{width: '300px', height: '300px'}"></div>
<input type="number" />
<input type="time" />
<input type="checkbox" />
<input type="radio" />
<select>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
<select>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
<textarea name=""
id=""
cols="30"
rows="10"></textarea>
<p>葫芦娃葫芦娃</p>
<p style="background: yellow">一根藤上七朵花</p>
<p>小小树藤是我家 啦啦啦啦</p>
<p>叮当当咚咚当当 浇不大</p>
<p>叮当当咚咚当当 是我家</p>
<p>啦啦啦啦</p>
<p>...</p>
</div>
<p>叮当当咚咚当当 浇不大</p>
</div>
</div>
</template>
<style type="text/css">
p {
color: blue;
}
</style>
<script>
import QRCode from "qrcodejs2";
import * as echarts from "echarts";
export default {
name: "app",
data () {
return {
printLoading: false,
times: 0,
printAsyncUrl: {
preview: true,
previewTitle: 'Test Title',
previewPrintBtnLabel: 'Print',
asyncUrl (reslove, vue) {
const _set = setInterval(() => {
vue.times += 20
}, 1000)
setTimeout(() => {
reslove(process.env.NODE_ENV === 'production' ? 'https://power-kxlee.github.io/' : 'http://localhost:8080/')
clearInterval(_set)
}, 5000)
},
previewBeforeOpenCallback: this.previewBeforeOpenCallback ,
previewOpenCallback:this.previewOpenCallback,
beforeOpenCallback: this.beforeOpenCallback,
openCallback: this.openCallback,
closeCallback: this.closeCallback,
clickMounted: this.clickMounted
},
printUrl: {
url: process.env.NODE_ENV === 'production' ? 'https://power-kxlee.github.io/' : 'http://localhost:8080/',
preview: true,
previewTitle: 'Test Title',
previewPrintBtnLabel: 'Print',
previewBeforeOpenCallback: this.previewBeforeOpenCallback ,
previewOpenCallback:this.previewOpenCallback,
beforeOpenCallback: this.beforeOpenCallback,
openCallback: this.openCallback,
closeCallback: this.closeCallback,
clickMounted: this.clickMounted
},
printObj: {
id: "printMe",
popTitle: "good print",
extraCss: "https://cdn.bootcdn.net/ajax/libs/animate.css/4.1.1/animate.compat.css, https://cdn.bootcdn.net/ajax/libs/hover.css/2.3.1/css/hover-min.css",
extraHead: '<meta http-equiv="Content-Language"content="zh-cn"/>',
beforeOpenCallback: this.beforeOpenCallback,
openCallback: this.openCallback,
closeCallback: this.closeCallback,
clickMounted: this.clickMounted
},
};
},
mounted () {
this.$nextTick(() => {
this.echart();
new QRCode(this.$refs.qrcode, {
width: 100,
height: 100,
text: "https://www.baidu.com/",
});
});
},
methods: {
clickMounted(vue) {
vue.$notify({
title: '消息',
message: '点击按钮的回调事件',
});
},
previewBeforeOpenCallback(vue) {
vue.$notify({
title: '消息',
message: '正在加载预览窗口',
});
},
previewOpenCallback(vue) {
vue.times = 0
vue.$notify({
title: '消息',
message: '已经加载完预览窗口',
type: 'success'
});
},
beforeOpenCallback(vue) {
vue.printLoading = true
vue.$notify({
title: '消息',
message: '正在准备打印控件',
});
},
openCallback(vue) {
vue.printLoading = false
vue.$notify({
title: '消息',
message: '已经打开了 打印控件',
});
},
closeCallback(vue) {
vue.$notify({
title: '消息',
message: '关闭了打印工具',
});
},
beforeOpen () {
this.printLoading = true
console.log('准备打开')
},
echart () {
let myChart = echarts.init(this.$refs.echartMain);
myChart.setOption({
title: {
text: "ECharts 入门示例",
},
tooltip: {},
xAxis: {
data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"],
},
yAxis: {},
series: [
{
name: "销量",
type: "bar",
data: [5, 20, 36, 10, 10, 20],
},
],
});
},
},
};
</script>
<style scoped lang="scss">
#app::v-deep {
font-family: "Avenir", Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
width: 800px;
margin: 0 auto;
.el-row {
margin-bottom: 20px;
&:last-child {
margin-bottom: 0;
}
.box-card {
margin-top: 10px;
}
}
}
[class*="loader-"] {
display: inline-block;
width: 1em;
height: 1em;
color: inherit;
vertical-align: middle;
pointer-events: none;
}
.loader-04 {
border: 1px solid currentcolor;
border-radius: 50%;
-webkit-animation: 1s loader-04 linear infinite;
animation: 1s loader-04 linear infinite;
position: relative;
}
.loader-04:before {
content: "";
display: block;
width: 0;
height: 0;
position: absolute;
top: -0.2em;
left: 50%;
border: 0.2em solid currentcolor;
border-radius: 50%;
}
@-webkit-keyframes loader-04 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes loader-04 {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
</style>