205 lines
4.1 KiB
Vue
205 lines
4.1 KiB
Vue
|
<script setup lang="ts">
|
|||
|
import { ref } from "vue";
|
|||
|
import Print from "@/utils/print";
|
|||
|
import pieChart from "./pieChart.vue";
|
|||
|
|
|||
|
defineOptions({
|
|||
|
name: "Print"
|
|||
|
});
|
|||
|
|
|||
|
interface User {
|
|||
|
date: string;
|
|||
|
name: string;
|
|||
|
age: number;
|
|||
|
address: string;
|
|||
|
}
|
|||
|
|
|||
|
const value = ref("1");
|
|||
|
|
|||
|
const options = [
|
|||
|
{
|
|||
|
value: "1",
|
|||
|
el: ".el-table",
|
|||
|
label: "Table"
|
|||
|
},
|
|||
|
{
|
|||
|
value: "2",
|
|||
|
el: ".echart",
|
|||
|
label: "Echart"
|
|||
|
},
|
|||
|
{
|
|||
|
value: "3",
|
|||
|
el: ".img",
|
|||
|
label: "Image"
|
|||
|
}
|
|||
|
];
|
|||
|
|
|||
|
function onPrint() {
|
|||
|
const el = options.filter(v => v.value === value.value)[0]?.el;
|
|||
|
Print(el).toPrint;
|
|||
|
}
|
|||
|
|
|||
|
const tableRowClassName = ({ rowIndex }: { row: User; rowIndex: number }) => {
|
|||
|
if (rowIndex === 1) {
|
|||
|
return "warning-row";
|
|||
|
} else if (rowIndex === 3) {
|
|||
|
return "success-row";
|
|||
|
}
|
|||
|
return "";
|
|||
|
};
|
|||
|
|
|||
|
const tableData: User[] = [
|
|||
|
{
|
|||
|
date: "2016-05-03",
|
|||
|
name: "Tom",
|
|||
|
age: 18,
|
|||
|
address: "No. 189, Grove St, Los Angeles"
|
|||
|
},
|
|||
|
{
|
|||
|
date: "2016-05-02",
|
|||
|
name: "Tom",
|
|||
|
age: 18,
|
|||
|
address: "No. 189, Grove St, Los Angeles"
|
|||
|
},
|
|||
|
{
|
|||
|
date: "2016-05-04",
|
|||
|
name: "Tom",
|
|||
|
age: 18,
|
|||
|
address: "No. 189, Grove St, Los Angeles"
|
|||
|
},
|
|||
|
{
|
|||
|
date: "2016-05-01",
|
|||
|
name: "Tom",
|
|||
|
age: 18,
|
|||
|
address: "No. 189, Grove St, Los Angeles"
|
|||
|
}
|
|||
|
];
|
|||
|
</script>
|
|||
|
|
|||
|
<template>
|
|||
|
<el-card shadow="never">
|
|||
|
<template #header>
|
|||
|
<div class="card-header">
|
|||
|
<span class="font-medium">打印功能(报表、图表、图片)</span>
|
|||
|
<el-select
|
|||
|
v-model="value"
|
|||
|
class="!w-[100px] mr-2"
|
|||
|
placeholder="Select"
|
|||
|
size="small"
|
|||
|
>
|
|||
|
<el-option
|
|||
|
v-for="item in options"
|
|||
|
:key="item.value"
|
|||
|
:label="item.label"
|
|||
|
:value="item.value"
|
|||
|
/>
|
|||
|
</el-select>
|
|||
|
<el-button size="small" type="primary" @click="onPrint">
|
|||
|
打印
|
|||
|
</el-button>
|
|||
|
</div>
|
|||
|
<el-link
|
|||
|
class="mt-2"
|
|||
|
href="https://github.com/pure-admin/vue-pure-admin/blob/main/src/views/able/print"
|
|||
|
target="_blank"
|
|||
|
>
|
|||
|
代码位置 src/views/able/print
|
|||
|
</el-link>
|
|||
|
</template>
|
|||
|
<el-row :gutter="24">
|
|||
|
<el-col
|
|||
|
v-motion
|
|||
|
:xs="24"
|
|||
|
:sm="24"
|
|||
|
:md="24"
|
|||
|
:lg="24"
|
|||
|
:xl="24"
|
|||
|
:initial="{
|
|||
|
opacity: 0,
|
|||
|
y: 100
|
|||
|
}"
|
|||
|
:enter="{
|
|||
|
opacity: 1,
|
|||
|
y: 0,
|
|||
|
transition: {
|
|||
|
delay: 200
|
|||
|
}
|
|||
|
}"
|
|||
|
>
|
|||
|
<p class="font-medium text-lg text-center">Table</p>
|
|||
|
<el-table
|
|||
|
border
|
|||
|
:data="tableData"
|
|||
|
:row-class-name="tableRowClassName"
|
|||
|
class="el-table w-full mt-[10px]"
|
|||
|
>
|
|||
|
<el-table-column prop="date" label="Date" />
|
|||
|
<el-table-column prop="name" label="Name" />
|
|||
|
<el-table-column prop="age" label="age" />
|
|||
|
<el-table-column prop="address" label="Address" />
|
|||
|
</el-table>
|
|||
|
</el-col>
|
|||
|
|
|||
|
<el-col
|
|||
|
v-motion
|
|||
|
:xs="11"
|
|||
|
:sm="11"
|
|||
|
:md="11"
|
|||
|
:lg="11"
|
|||
|
:xl="11"
|
|||
|
:initial="{
|
|||
|
opacity: 0,
|
|||
|
y: 100
|
|||
|
}"
|
|||
|
:enter="{
|
|||
|
opacity: 1,
|
|||
|
y: 0,
|
|||
|
transition: {
|
|||
|
delay: 200
|
|||
|
}
|
|||
|
}"
|
|||
|
>
|
|||
|
<p class="font-medium text-lg text-center">Echart</p>
|
|||
|
<pieChart class="echart mt-[10px]" />
|
|||
|
</el-col>
|
|||
|
|
|||
|
<el-col
|
|||
|
v-motion
|
|||
|
:xs="11"
|
|||
|
:sm="11"
|
|||
|
:md="11"
|
|||
|
:lg="11"
|
|||
|
:xl="11"
|
|||
|
:initial="{
|
|||
|
opacity: 0,
|
|||
|
y: 100
|
|||
|
}"
|
|||
|
:enter="{
|
|||
|
opacity: 1,
|
|||
|
y: 0,
|
|||
|
transition: {
|
|||
|
delay: 200
|
|||
|
}
|
|||
|
}"
|
|||
|
>
|
|||
|
<p class="font-medium text-lg text-center">Image</p>
|
|||
|
<img
|
|||
|
src="https://pure-admin-utils.netlify.app/logo.png"
|
|||
|
alt="avatars"
|
|||
|
class="img mt-[10px] m-auto"
|
|||
|
/>
|
|||
|
</el-col>
|
|||
|
</el-row>
|
|||
|
</el-card>
|
|||
|
</template>
|
|||
|
|
|||
|
<style lang="scss" scoped>
|
|||
|
:deep(.el-table__row.warning-row) {
|
|||
|
--el-table-tr-bg-color: var(--el-color-warning-light-9);
|
|||
|
}
|
|||
|
|
|||
|
:deep(.el-table__row.success-row) {
|
|||
|
--el-table-tr-bg-color: var(--el-color-success-light-9);
|
|||
|
}
|
|||
|
</style>
|