Files
tekelanew_acs/acs/nladmin-ui/node_modules/vue-print-nb/src/App.vue
2024-12-05 09:33:18 +08:00

311 lines
8.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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>