vue+elementui+lodop打印表格

非單頁結構,是在mvc視圖中引用vue和elementui來使用的,打印el-table表格內容時,可能是因爲樣式的原因,打印的格式很難調整,在界面中增加一個隱藏的div,裏面放個table,獲取數據後填充table,打印這個table的內容,樣式就好調整了。

@{
ViewBag.Title = "學生基本信息統計";
Layout = "~/Views/Shared/_vueLayout.cshtml";
}
<link href="~/Content/TableStyle.css" rel="stylesheet" />
<script language="javascript" src="~/Scripts/Lodop/LodopFuncs.js"></script>
<script src="~/Scripts/vue/dept.js"></script>
<script src="~/Scripts/vue/grade.js"></script>
<script src="~/Scripts/vue/ban.js"></script>

<div id="app">
    <el-row>
        <el-form :inline="true" size="mini">
            <el-form-item label="專業:">
                <spec-combo v-model=frmsrh.spno></spec-combo>
            </el-form-item>
            <el-form-item label="年級:">
                <grade-input v-model="frmsrh.grade">
                    </grade-select>
            </el-form-item>
            <el-form-item label="班級:">
                <ban-input v-model="frmsrh.classno" v-bind:spno="frmsrh.spno" v-bind:grade="frmsrh.grade"></ban-input>
            </el-form-item>
            <el-form-item label="學號:">
                <el-input v-model="frmsrh.stid" style="width:100px;" clearable></el-input>
            </el-form-item>
            <el-form-item label="姓名:">
                <el-input v-model="frmsrh.name" style="width:100px;" clearable></el-input>
            </el-form-item>
            <el-form-item label="當前狀態:">
                <el-select v-model="frmsrh.changetype" placeholder="請選擇">
                    <el-option v-for="item in stuflag" :key="item.value" :label="item.label" :value="item.value">
                    </el-option>
                </el-select>
            </el-form-item>
            <el-form-item>
                <template>
                    <el-button type="primary" icon="el-icon-search" size="mini" v-on:click="list">查詢</el-button>
                    <el-button type="primary" icon="el-icon-printer" size="mini" v-on:click="print">打印</el-button>
                    <el-button type="primary" icon="el-icon-download" size="mini" v-on:click="exp">導出</el-button>
                </template>
            </el-form-item>
            <el-form-item label="分組條件:">
                <el-checkbox-group v-model="frmsrh.gfields">
                    <el-checkbox v-for="g in groupfields" :label="g.id" :key="g.id" :disabled="g.dis" :checked="g.chk">
                        <template>{{g.text}}</template></el-checkbox>
                </el-checkbox-group>
            </el-form-item>
        </el-form>
    </el-row>
    <el-table ref="tab" size="mini" :data="table.data" border v-loading="loading">
        <el-table-column v-for="c in table.cols" :label="c.text" :prop="c.id" align="center"></el-table-column>
    </el-table>
    <div id="stReport" style="display: none;">
        <table id="stTable" class="t2" border=1 align="center" style="width:95%">
            <th v-for="c in table.cols">{{c.text}}</th>
            <tr v-for="(d,index) in table.data" >
                <td v-for="c in table.cols">{{getdata(index,c.id)}}</td>
            </tr>
        </table>
    </div>
</div>

<script>
    new Vue({
        el: '#app',
        data() {
            return {
                stuflag: [{ value: '', label: '全部' }, { value: '在校', label: '在校' }, { value: '離校', label: '離校' }],
                groupfields: [
                    { 'text': '年級', 'id': 'grade' },
                    { 'text': '院系名稱', 'id': 'dptname' },
                    { 'text': '專業名稱', 'id': 'spname' },
                    { 'text': '班級', 'id': 'class' },
                    { 'text': '錄取類型', 'id': 'lqtype' },
                    { 'text': '生源地市', 'id': 'ds' },
                    { 'text': '生源縣區', 'id': 'xq' },
                    { 'text': '性別', 'id': 'sex' },
                    { 'text': '民族', 'id': 'nation' },
                    { 'text': '政治面貌', 'id': 'political' },
                    { 'text': '籍貫', 'id': 'nativeplace' },
                    { 'text': '培養層次', 'id': 'type' },
                    { 'text': '最新狀態', 'id': 'changetype' },
                    { 'text': '最新變更狀態', 'id': 'changestate' },
                    { 'text': '補錄否', 'id': 'bl' },
                    { 'text': '班級數', 'id': 'num_class', dis: true, chk: true },
                    { 'text': '人數', 'id': 'num', dis: true, chk: true }
                ],
                frmsrh: {
                    spno: '',
                    grade: '',
                    classno: '',
                    stid: '',
                    name: '',
                    changetype: '',
                    gfields: [],
                    groupfields: ''
                },
                table: {
                    cols: [],
                    data: []
                },
                loading: false
            }
        },
        methods: {
            list() {
                this.table.cols = [];
                this.groupfields.forEach(item => {
                    if (this.frmsrh.gfields.indexOf(item.id) >= 0) {
                        this.table.cols.push(item);
                    }
                })
                var that = this;
                this.frmsrh.groupfields = '';
                this.frmsrh.gfields.forEach(item => {
                    if (item != 'num_class' && item != 'num') {
                        this.frmsrh.groupfields += ',' + item;
                    }
                })

                if (this.frmsrh.groupfields) {
                    this.frmsrh.groupfields = this.frmsrh.groupfields.substr(1);
                }
                $.post('/Admin_Areas/StInfo/GetStinfoGroupBy', this.frmsrh, function (res) {
                    if (res.Msg) {
                        that.$message.error({ message: res.Msg, duration: 0, showClose: true });
                    }
                    else {
                        var obj = JSON.parse(res);
                        that.table.data = obj.rows;
                    }
                })
            },
            print() {
                var LODOP = getLodop();
                LODOP.PRINT_INITA(10, 10, 754, 453, "學生統計結果");
                LODOP.SET_PRINT_PAGESIZE(1, "210mm", "297mm", "");
                var strs="<link href='/Content/TableStyle.css' rel='stylesheet' />";
                var strp =strs+  $('#stReport').html();
                LODOP.ADD_PRINT_TABLE("1mm", "2mm", "RightMargin:1mm", "BottomMargin:2mm", strp);
                LODOP.PREVIEW();
            },
            getdata(index,id){
                return this.table.data[index][id];
            },
            exp() {
                var form = $("<form/>").attr('action', '/admin_areas/stinfo/ExpStinfoGroupBy').attr('method', 'post');
                form.attr('target', '_blank');
                this.frmsrh.groupfields = '';
                this.frmsrh.gfields.forEach(item => {
                    if (item != 'num_class' && item != 'num') {
                        this.frmsrh.groupfields += ',' + item;
                    }
                })

                if (this.frmsrh.groupfields) {
                    this.frmsrh.groupfields = this.frmsrh.groupfields.substr(1);
                }
                $.each(this.frmsrh, function (k, v) {
                    form.append('<input type="hidden" name="{0}" value="{1}" />'.format(k, v));
                });

                form.appendTo("body").css('display', 'none').submit();
            }
        },
    });
</script>

stReport 中放的是一個table,根據列與數據行來填充內容,打印時需要將樣式文件也傳進去

 var strs="<link href='/Content/TableStyle.css' rel='stylesheet' />";
var strp =strs+  $('#stReport').html();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章