前台界面点击导出从后台获取数据导出

点 赞
1
热 度
59
评 论
0
  1. 首页
  2. Intersystem IRIS
  3. JS代码业务
  4. 前台界面点击导出从后台获取数据导出

1、首先在前台界面加入按钮和样式事件

<div class="pha-row" style="text-align:center;margin-top:15px;">
	<a href="#" id="btnPrint" class="hisui-linkbutton" data-options="iconCls:'icon-w-print'">导出</a>
</div>

前台效果展示

2、在前台界面需要引入相关前置js,保证后台js使用中不报错,extendscript必须要在export上面,不然加载顺序不一致导致报错。

	<script type="text/javascript" src="../scripts/pha/plugins/xlsx/xlsx.extendscript.js"></script>
	<script type="text/javascript" src="../scripts/pha/com/v1/js/export.js"></script>

3、在主js页面加载初始化方法,实现导出功能;

$(function() {	
	InitEvents();
});

// 初始化 - 事件绑定
function InitEvents(){
    $('#btnPrint').on("click", Print);
}

实现Print导出方法,用纯js方法

function Print() {
    PHA.Loading('Show'); 
    var reportObj = $('#report').keywords('getSelected');
    if (!reportObj || reportObj.length === 0) {
        PHA.Loading('Hide');
        alert('请选择报表类型后再导出');
        return;
    }

    var selectedItem = reportObj[0];
    var queryId = selectedItem.id;
    var queryName = queryId.replace(/_/g, ''); // 移除下划线
    var reportText = selectedItem.text; 
    var startDate = $('#startDate').datebox('getValue');
    var endDate = $('#endDate').datebox('getValue');
    if (!startDate || !endDate) {
        PHA.Loading('Hide');
        alert('请选择开始日期和结束日期');
        return;
    }
    var queryParams = {
        QUERY: queryName, 
        startDate: startDate,
        endDate: endDate
    };
    var baseUrl = 'NTSC/NTSCAntiAgentStat/NTSCAntiAgentAction.csp';
    const urlWithParams = new URL(baseUrl, window.location.href); 
    Object.keys(queryParams).forEach(key => {
        urlWithParams.searchParams.append(key, queryParams[key]);
    });

    // 发起请求
    fetch(urlWithParams.toString(), {
        method: 'GET',
        headers: { 'Accept': 'application/json' }
    })
    .then(response => {
        if (!response.ok) throw new Error(`请求失败: ${response.statusText}`);
        return response.json();
    })
    .then(data => {
        PHA.Loading('Hide');
        // 验证数据格式
        if (!data || !data.cols || !data.rows) {
            alert('导出数据格式错误,请联系管理员');
            return;
        }
        var titleObj = {};
        data.cols.forEach(col => {
            if (col.ifExport === false) return;
            var field = col.descField || col.field;
            titleObj[field] = col.title;
        });
        var datePrefix = new Date().toISOString().split('T')[0];
        var fileName = `${reportText}_${datePrefix}_${Date.now()}.xlsx`;
        if (window.PHA_EXPORT?.XLSX) {
            PHA_EXPORT.XLSX(titleObj, data.rows, fileName);
        } else {
            alert('导出组件未加载,请检查依赖');
        }
	    })
	    .catch(error => {
	        PHA.Loading('Hide');
	        console.error('导出失败:', error);
	        alert(`导出失败: ${error.message}`);
	    });
}


window.PHA_EXPORT = window.PHA_EXPORT || {};
PHA_EXPORT.XLSX = function(titleObj, rowsData, fileName, colsFormatter) {
    const cols = Object.keys(titleObj).map(field => ({
        field: field,
        title: titleObj[field]
    }));
    const ws = XLSX.utils.json_to_sheet(rowsData, {
        header: Object.keys(titleObj), // 表头字段名
        skipHeader: false // 生成 Excel 表头行
    });
    const range = XLSX.utils.decode_range(ws['!ref']); 
    for (let colIdx = 0; colIdx <= range.e.c; colIdx++) {
        const cellAddr = XLSX.utils.encode_cell({ r: 0, c: colIdx });
        ws[cellAddr].s = { 
            font: { 
                name: '微软雅黑', 
                bold: true
            } 
        };
    }
    const wb = XLSX.utils.book_new();
    XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
    XLSX.writeFile(wb, fileName);
};

其中 baseUrl 地址指向 csp 页面中的 action,触发后台数据请求。并且动态获取前台传过来的参数

<csp:method name=OnPreHTTP arguments="" returntype=%Boolean>
  i ##Class(websys.SessionEvents).SessionExpired() q 1
  q 1
</csp:method>
<script language="cache" runat="server">
 s action = $Get(%request.Data("action",1))
 s QUERY = $Get(%request.Data("QUERY",1))
 
 i QUERY="NTSCMJZCFJL" d
 .s startdate=$Get(%request.Data("startDate",1))
 .s enddate=$Get(%request.Data("endDate",1))
 .w ##class(NTSC.ExterIntface.AntiAgentStat.NTSCAntiAgentStat).NTSCMJZCFJL(startdate,enddate)
</script>


余乃云水散人,栖于数字之墟。性耽幽静,常以青简为田,墨痕为穗。晨起推窗,听松风煮茶;夜阑掩卷,伴竹影扫阶。此间筑小筑三椽,藏闲话若干:或遇史海遗珠,则录以素札;偶得诗瓢碎玉,便缀作清吟。往来皆烟霞客,谈笑有鸿儒踪。诸君若得暇,不妨暂驻云履,共品一盏烟岚,半卷春秋。

不具版权性
不具时效性

文章内容不具时效性。若文章内容有错误之处,请您批评指正。

目录

欢迎来到南鸢宸羲的站点,为您导航全站动态

174 文章数
38 分类数
4 评论数
47标签数
最近评论
七斗牛

七斗牛


6666