表头的查询条件页面示意图,只重新写了重要的方法,其他都不变

1、主程序csp页面代码

<!DOCTYPE html>
<!--
    需求质控列表
    csp:  csp/NTSC/NTSCReqQuaCont.csp
    js:   scripts/NTSC/NTSCReqQuaCont.js
-->
<html>
<!-- 验证session过期 -->
<csp:method name=OnPreHTTP arguments="" returntype=%Boolean>
    d ##Class(websys.SessionEvents).SessionExpired() q $$$OK
</csp:method>

<head>
    <!-- iMedical版本标题 -->
    <title>
        <TRAK:TRANSLATE id=title>##(%session.Get("TITLE"))##</TRAK:TRANSLATE>
    </title>
    <TRAK:HEAD></TRAK:HEAD>
    <HISUI />
    <PHALIBV1 />
    <PHAPRINTCOM />
    <style>
        #btnSaveArea {
            display: none;
        }

        .pha-rec-create-hide {
            display: none;
            padding: 0;
            border: 0;
        }
        #qCondition a{
            min-width:90px;
        }
        #winRetQuickModify .dialog-content {
            border-radius: 6px !important;
        }
        #ImportWin .dialog-content {
            border-radius: 6px !important;
        }
        #vbpFlag + label.checkbox {
            padding-left: 16px;
        }
    </style>
</head>

<body>
    <div class="hisui-layout" fit="true" id="lyMainView">
        <div data-options="region:'center',border:false" class="pha-body">
            <div class="hisui-layout" fit="true" id="layout-rec-create">
                <div data-options="region:'north',height:155,split:true,border:false, title:'需求质控列表',collapsible:false,headerCls:'panel-header-gray',iconCls:'icon-panel-brand'" id="layout-rec-create-panel">
                    <table id="qCondition" class="pha-condition-table">
                        <tr>
							<td class="pha-label">
                				<label for="startDate">#(..Get("创建开始日期:"))#</label>
            				</td>
            				<td class="pha-input">
                				<input type="text" id="startDate" data-pha="class:'hisui-datebox',query:true,clear:true">
            				</td>
                            <td class="pha-label">
                                <label for="operateType">#(..Get("质控类型:"))#</label>
                            </td>
                            <td class="pha-input">
                                <input type="text" id="operateType" data-pha="class:'hisui-combobox',clear:true,save:true,query:true">
                            </td>
                            <td class="pha-label">
                                <label for="stkCatGrp">#(..Get("交付中心:"))#</label>
                            </td>
                            <td class="pha-input">
                                <input type="text" id="stkCatGrp" data-pha="class:'hisui-combobox',clear:true,save:false,query:true">
                            </td>
                            <td class="pha-label">
                				<label for="no">#(..Get("需求序号:"))#</label>
            				</td>
            				<td class="pha-input">
                				<input type="text" id="no" data-pha="class:'hisui-validatebox',query:true,clear:true" >
            				</td>

                            
                            <td class="pha-button">
                				<a class="hisui-linkbutton" id="btnFind-q">查询</a>
            				</td>
                             <td class="pha-button">
                                <a data-pha-btn class="hisui-linkbutton" id="btnSave">保存</a>
                            </td>
                        </tr>
                        <tr>
            				<td class="pha-label">
                				<label for="endDate">#(..Get("创建结束日期:"))#</label>
            				</td>
            				<td class="pha-input">
                				<input type="text" id="endDate" data-pha="class:'hisui-datebox',query:true,clear:true">
            				</td>
                            <td class="pha-label">
                                <label for="purchUser">#(..Get("质量分级:"))#</label>
                            </td>
                            <td class="pha-input">
                                <input type="text" id="purchUser" data-pha="class:'hisui-combobox',clear:true,query:true">
                            </td>
                            <td class="pha-label">
                				<label for="status">#(..Get("所属产品组:"))#</label>
            				</td>
            				<td class="pha-input">
                				<input type="text" id="status" data-pha="class:'hisui-combobox',query:true,clear:true">
            				</td>
                            <td class="pha-label">
                				<label for="filterField">#(..Get("需求标题:"))#</label>
            					</td>
            				<td class="pha-input">
               					 <input type="text" id="filterField" data-pha="class:'hisui-validatebox',query:true,clear:true" >
            				</td>
                            <td class="pha-button">
                                <a class="hisui-linkbutton blue"  id="btnClean">清屏</a>
                            </td>
                            <td class="pha-button">
                                <a class="hisui-linkbutton blue" id="btnImportWin" data-phabtn>导入</a>
                            </td>
                        </tr>
                        
                    </table>
                    
                </div>
                <div data-options="region:'center',headerCls:'panel-header-gray',bodyCls:'panel-body-gray'">    
                    <table id="gridItm"></table>
                </div>
            </div>
        </div>
    </div>
   

    <!-- 加载本页面js -->
    <script type="text/javascript" src="../scripts/pha/in/v3/com/js/morecondition.js"></script>
    <script type="text/javascript" src="../scripts/NTSC/ReqQuaCont/com.js"></script>
    <script type="text/javascript" src="../scripts/NTSC/ReqQuaCont/compent.js"></script>
    <script type="text/javascript" src="../scripts/NTSC/NTSCReqQuaCont.js"></script>
    <script type="text/javascript" src="../scripts/pha/in/v3/com/js/import.js"></script>
    <!-- 导入excel文件读取插件 -->
    <script type="text/javascript" src="../scripts/pha/plugins/xlsx/xlsx.full.min.js"></script>
    <!-- 查询 -->
    <script type="text/javascript" src="../scripts/pha/in/v3/rec/query.js"></script>
    <csp:include page="../NTSC/NTSCAntiAgentStat/NTSCAntiAgentStat.template.csp" >
    <script type="text/javascript">
        $('body').append('<div id="winQueryRec"  class="js-pha-com-window-sign pha-dialog" style="background-color: transparent;border:false"></div>')
        $('#winQueryRec').append($('#template-rec-query').html())
        $.parser.parse($('#lyMainView-q').parent());;
    </script>
</body>

</html>

2、主页面程序相关的js

/**
* 需求质控列表
*    csp:  csp/NTSC/NTSCReqQuaCont.csp
*    js:   scripts/NTSC/NTSCReqQuaCont.js
*
*/
var RECID = ""  // 在弹框中使用全局变量取制单界面的主ID
$(function () {
    /**
     * 内部全局, 数据变化全部通过set给值
     */
    var biz = {
        data: {
            recID: '',
            status: 'SAVE',
            handleStatus: '',
            keepInputFields: ['stkCatGrp', 'stkCatGrpDesc'],
            keepInputFlag: true,
            defaultData: [
                {
	                'startDate-q': PHA_UTIL.GetDate('t-60'),
                    'endDate-q': PHA_UTIL.GetDate('t'),
                   
                }
            ]
        },
        getData: function (key) {
            return this.data[key];
        },
        setData: function (key, data) {
            this.data[key] = data;
            switch (key) {
                case 'recID':
                    RECID = data;
                    Select(data);
                    break;
                case 'status':
                    if (data === '') {
                        this.data[key] = 'SAVE';
                    }
                    ControlOperation();
                    break;
                case 'operateType':
                    $('#operateType').combobox('setValue', data);
                    break;
                default:
                    break;
            }
        }
    };
    
    /**
     * 初始化
     */
    var com = REC_COM;
    var settings = com.GetSettings(); 
    var components = REC_COMPONENTS();
    COM_CONDITION.InitComponents(); 		// 更多条件 morecondition.js
    components('No', 'no');
    components('StkCatGrp', 'stkCatGrp');
    components('PurchUser', 'purchUser');
    components('Date', 'startDate');
    components('Date', 'endDate');
    components('FilterField', 'filterField');
    components('OperateType', 'operateType', {}, function (rows) {
        rows.forEach((element) => {
            if (element.DefaultFlag === 'Y') {
                biz.setData('operateType', element.RowId);
            }
        });
    });
    components('StatusDes', 'status');
    components('ItmGrid', 'gridItm', {
        toolbar: '#gridItmBar',
        rownumber: true, // 可走前端参数设置, 这只是初步默认
        pagination: false,
        showFooter: true,
        data: {
            rows: [],
            footer: [{ inciCode: '合计' }],
            total: 0
        },
        onNextCell: function (index, field, value, isLastRow, isLastCol) {
            if (isLastRow && isLastCol) {
                $('#btnAddItm').trigger('click-i');
            }
        },
        onClickCell: function (index, field, value) {
            if (CanEdit() === false) {
                return;
            }
            PHA_GridEditor.Edit({
                gridID: $(this)[0].id,
                index: index,
                field: field,
                forceEnd: true
            });
            var isHerb = $('#' + this.id).datagrid('getRow', index).isHerb;
            var girdManf = $('#gridItm').datagrid('getEditor', { index: index, field: 'manf' });
            if (girdManf !== null) {
                let target = girdManf.target;
                if (isHerb != 'Y') {
                    $(target).combobox('disable');
                }
            }
        },
        onLoadSuccess: function () {
            $(this).datagrid('clearChecked');
            com.SumGridFooter('#' + this.id, ['rpAmt', 'spAmt', 'invAmt']);
        },
        onAfterEdit: function (rowIndex, rowData, changes) {
            // 如果是点击保存, 则不需要触发此处
            if (biz.getData('Saving') === true) {
                return;
            }
            if (PHA_GridEditor.IsRowChanged('#gridItm', rowIndex) === true) {
                ValidateSave(rowData, rowIndex);
                CheckDistinct();
                com.SumGridFooter('#' + this.id);
            }
        }
    });
	PHA_EVENT.Bind('#btnFind-q', 'click', function () {
        com.QueryMainGrid('gridItm', com.Condition('#qCondition', 'get'));
    });
    PHA_EVENT.Bind('#btnClean', 'click', function () {
        com.Condition('#qCondition', 'clear');
        com.Condition('#winRetQuickModify', 'clear');
        biz.setData('recID', '');
        biz.setData('status', 'SAVE');
        COM_CONDITION.ClearFormData(); 
        SetDefaults();
    });
    PHA_EVENT.Bind('#btnSave', 'click', function () {
        biz.setData('handleStatus', 'Save');
        biz.setData('Saving', true);
        Save();
        biz.setData('Saving', false);
    });
   
    
    InitImport();


    /**
     * 根据窗口的数据加载不同数据
     * @param {*} winID 弹出窗口的ID
     * @returns
     */
    function HandleWindowData(winID) {
        var retData = $.data($('#' + winID)[0], 'retData');
        retData = retData || {};
        var recID = retData.recID || '';
        if (recID === '') {
            return;
        }
        biz.setData('keepInputFlag', false);
        var type = retData.type || '';
        if (type === '') {
            biz.setData('recID', recID);
            return;
        }
        var loc = retData.loc || '';
        if (loc !== ''){
            $('#loc').combobox('setValue', loc);
        }
        if (type === 'copy' || type === 'mould') {
            biz.setData('recID', '');
            com.Copy({ recID: recID }, function (retData) {
                com.SetKeyValue2Null(retData.main, biz.getData('keepInputFields'));
                if (retData.main.recID !== '') {
                    // 后台直接复制到表
                    biz.setData('recID', recID);
                    return;
                }
                if (type === 'copy') {
                    retData.main.dataLinkFrom = recID;
                }
                PHA.SetVals([retData.main]);
                var rows = retData.rows;
                PHA_GridEditor.LoadChangedRows('#gridItm', { total: rows.length, rows: rows });
            });
            biz.setData('status', 'SAVE');
        }
    }

    function Save() {
        var apiMethod = com.Fmt2ApiMethod(biz.getData('handleStatus'));
        if (apiMethod === '') {
            return;
        }
       
        var mainObj = com.Condition('#qCondition', 'get', { dotype: 'save' });
        if (mainObj === undefined) {
            return;
        }
        mainObj.recID = biz.getData('recID');
        mainObj.mainRowID = biz.getData('recID');
        mainObj.statusCode = biz.getData('handleStatus');

        var rows = [];
        for (const it of com.GetChangedRows('gridItm')) {
            var rowData = $.extend({}, it);
            rows.push(rowData);
        }
        var data4save = {
            main: mainObj,
            rows: rows
        };
        PHA.Loading('Show');
        com.Invoke(apiMethod, data4save, function (retData) {
            PHA.Loading('Hide');
            if (typeof retData === 'string') {
                PHA.Alert('', retData, 'warning');
            } else {
                components('Pop', '处理成功', 'success');
                biz.setData('recID', retData.data);
                /* 保存之后自动打印 */
                if (apiMethod === 'HandleSave'){
	            	if (settings.App.AutoPrintAfterSave == 'Y'){
	            		com.Print(biz.getData('recID'));
	            	}
                }
                /* 完成之后自动审核 */
                if (apiMethod === 'HandleFinish') {
                    var data4Audit = {
                        recID: biz.getData('recID')
                    }
                    com.Invoke("AutoAuditAfterFinish", data4Audit, function (retData) {
                        if (typeof retData === 'string') {
                            PHA.Alert('', retData, 'warning');
                        } else {
                            // components('Pop', '自动审核成功', 'success'); 不弹
                        }
                    });
                        
                }
            }
        });
    }

    function ValidateEditGrid() {
        var val = true;
        var msg = '';
        try {
            if ($('#gridItm').datagrid('getRows').length == 0) {
                throw '没有需要操作的数据';
            }
        } catch (error) {
            val = false;
            msg = error;
        } finally {
            if (msg !== '' && typeof msg === 'string') {
                components('Pop', msg);
            }
            return val;
        }
    }
    function CheckDistinct() {
        // 校验重复
        var distinctFields = $('#gridItm').datagrid('options').distinctFields;
        var distinctMsg = PHA_GridEditor.CheckDistinct({ gridID: 'gridItm', fields: distinctFields });
        if (distinctMsg !== '') {
            components('Pop', distinctMsg + ',药品、批号、发票号,不能完全相同');
            return false;
        }
        return true;
    }
    function ValidateSave(rowData, rowIndex) {
        var mainObj = com.Condition('#qCondition', 'get', { dotype: 'save' });
        if (mainObj === undefined) {
            return false;
        }
        mainObj.recID = biz.getData('recID');
        mainObj.mainRowID = biz.getData('recID');

        var rows = [];
        if (rowData === undefined) {
            var forRows = $('#gridItm').datagrid('getRows');
            for (const it of forRows) {
                var rowData = $.extend({}, it);
                rows.push(rowData);
            }
        } else {
            rowData.rowIndex = rowIndex;
            if ((rowData.inciCode || '') === '') {
                return true;
            }
            rows.push(rowData);
        }
        // 异步只是稍微好那么一点, 但是感受不出来
        var valRet = com.InvokeSyn('ValidateSave', {
            main: mainObj,
            rows: rows
        });
        if (valRet.type !== '') {
            PHA.Warn2Grid('#gridItm', { warnInfo: valRet });
            if (rowIndex === undefined) {
                // 点击保存的提醒
                PHA.ShowWarn({ warnInfo: valRet });
                if (valRet.type === 'terminate') {
                    return false;
                }
            }
        }
        return true;
    }
   
    function AddRow() {
        if (CanAddRow() === false) {
            return;
        }
        var rows = $('#gridItm').datagrid('getRows');
        if (rows.length > 0) {
            var inciCode = rows[rows.length - 1].inciCode || '';
            // 最后一行无效, 直接定位编辑
            if (inciCode === '') {
                PHA_GridEditor.Edit({
                    gridID: 'gridItm',
                    index: rows.length - 1,
                    field: 'inci',
                    forceEnd: true
                });
                return;
            }
        }
        PHA_GridEditor.End('gridItm');
        var rowIndex = $('#gridItm').datagrid('getRows').indexOf($('#gridItm').datagrid('getSelected'));
        if (rowIndex < 0) {
            rowIndex = $('#gridItm').datagrid('getRows').length - 1;
        }
        var defaultRowData = GetDefaultRowData('#gridItm', rowIndex);
        PHA_GridEditor.Add({
            gridID: 'gridItm',
            field: 'inci',
            rowData: defaultRowData
        });
    }
  
    function Select(recID) {
        if (recID === '') {
            $('#recBanner').phabanner('reset');
            $('#gridItm').datagrid('clear');
            return;
        }
        var data = com.GetMainData(recID);
        if (typeof data === 'string') {
            return;
        }
        if (biz.getData('keepInputFlag') === true) {
            com.DeleteJsonKeys(data, biz.getData('keepInputFields'));
        }else{
            com.SetKeyValue2Null(data, biz.getData('keepInputFields'));
        }
        biz.setData('keepInputFlag', true);
        data.loc = {
                RowId: data.loc,
                Description: data.locDesc,
                Select: false
            }
        setTimeout(function(){PHA.SetVals([data]);}, 500);
        components('Banner', 'recBanner', data);
        biz.setData('status', data.status);
        com.QueryItmGrid('gridItm', { recID: recID });
    }
    function CanEdit() {
        if (biz.getData('status') !== 'SAVE') {
            return false;
        }
        return true;
    }
    function CanAddRow() {
        if (CanEdit() === false) {
            return false;
        }
        var data = com.Condition('#qCondition', 'get', { doType: 'save' });
        if (data === undefined) {
            return false;
        }
        if (settings.App.StkCatRequire === 'Y' && $('#stkCatGrp').combobox('getValues').toString() === '') {
            components('Pop', '类组,不能为空', 'alert');
            return false;
        }
        if (settings.App.StkCatRequire === '' && settings.Com.StkCatSet === 'N' && $('#stkCatGrp').combobox('getValues').toString() === '') {
            components('Pop', '类组,不能为空', 'alert');
            return false;
        }
        return true;
    }
    function GetDefaultRowData(target, rowIndex) {
        let retObj = {
            checkPackFlag : 'Y'
        };
        const rows = $(target).datagrid('getRows');
        if (rows.length === 0) {
            return retObj;
        }
        rowIndex = isNaN(rowIndex) ? rows.length - 1 : rowIndex; // 上一行
        const rowData = rows[rowIndex];
        for (const iterator of $('#keyToolInput').keywords('getSelected')) {
            if (iterator.id === 'SameInvData') {
                retObj.invNo = rowData.invNo;
                retObj.invDate = rowData.invDate;
                retObj.invCode = rowData.invCode;
            }
            if (iterator.id === 'SameSxNo') {
                retObj.sxNo = rowData.sxNo;
            }
        }
        return retObj;
    }
    function SetDefaults() {
        PHA.SetVals(biz.getData('defaultData'));
        $('#operateType').combobox('reload');
        $('#stkCatGrp').combobox('reload');
        // $('#purchUser').combobox('reload');
    }
    function ControlOperation() {
        com.ControlOperation({
            '#btnDelete': {
                disabled: biz.getData('recID') === '' || biz.getData('status') !== 'SAVE'
            },
            '#btnAddItm': {
                disabled: biz.getData('status') !== 'SAVE'
            },
            '#btnModify': {
                disabled: biz.getData('status') !== 'SAVE'
            },
            '#btnPrint': {
                disabled: biz.getData('recID') === ''
            },
            '#btnDeleteItm': {
                disabled: biz.getData('status') !== 'SAVE'
            },
            '#btnFinish': {
                disabled: biz.getData('status') !== 'SAVE',
                hide: biz.getData('status') !== 'SAVE'
            },
            '#btnFinishCancel': {
                disabled: biz.getData('status') !== 'COMP',
                hide: biz.getData('status') == 'SAVE'
            },
            '#btnExport': {
                disabled: biz.getData('recID') === ''
            },
            '#btnSave': {
                disabled: biz.getData('status') !== 'SAVE'
            }
        });

        if (settings.App.AutoTransToReqLoc !== 'Y') {
            $('#labelForReqLoc').hide();
            $('#reqLoc').next(".combo").hide();
        }
    }
    function LoadCopyGo() {
        var topRetData = PHA_COM.TOP.Get('pha.in.v3.rec.create.csp_copy', true);
        if (topRetData !== '') {
            $('#btnClean').trigger('click-i');
            // 必须等界面加载完成才能赋值,不然界面表单的初始化会覆盖复制过来的值
            setTimeout(function () { 
                PHA.SetVals([topRetData.main]);
                var rows = topRetData.rows;
                PHA_GridEditor.LoadChangedRows('#gridItm', { total: rows.length, rows: rows });
            }, 300);
            
        }
    }
    /**检查导入数据*/
    function ImportCheck() {
        var rows = $('#gridItm').datagrid('getRows');
		if (rows != 0){
			PHA.Msg('info', '导入时请保持明细列表为空!' );
			return false;
		}
        return true;
    }
    function InitImport() {
        PHAIN_IMPORT.FileName = $g('需求导入模板') + '.xlsx';
        PHAIN_IMPORT.Title = {
            ReqNo: 			$g('需求序号'),
  			ReqTitle: 		$g('需求标题'),
  			ReqDesc: 		$g('需求描述'),
  			ReqAttach:  	$g('需求附件'),
  			QCType: 		$g('质控类型'),
  			CompType: 		$g('投诉类型'),
  			CompContent: 	$g('投诉内容'),
  			QGrade: 		$g('质量分级'),
  			QIssueType: 	$g('质量问题类型'),
  			QIssueDesc: 	$g('质量问题描述'),
  			QIStatus: 		$g('质检状态'),
  			CaseReq: 		$g('案例需求'),
  			ImpSugg: 		$g('改进意见'),
  			DelCenter: 		$g('交付中心'),
  			Partition: 		$g('所属分区'),
  			Initiator: 		$g('发起人'),
  			InitGroup: 		$g('发起组'),
  			Receiver: 		$g('接收人'),
  			RecGroup: 		$g('接收组'),
  			Assigner: 		$g('分配人'),
  			CurrHandler: 	$g('需求当前人'),
 			PubDeadline: 	$g('公示截止日期'),
  			ReleaseDate: 	$g('发布日期'),
  			QIPeriodNo: 	$g('质检期数'),
  			HighScore: 		$g('最高分'),
 			LowScore: 		$g('最低分'),
  			AvgScore: 		$g('平均分'),
  			ScoreDiff: 		$g('分差'),
 			ScoredPers: 	$g('已评分人员'),
  			CurrGroup: 		$g('当前组'),
  			Creator: 		$g('创建人'),
  			CurrPerson: 	$g('当前人'),
  			CreateDate: 	$g('创建日期'),
        };
        PHAIN_IMPORT.TmpData = [{
            ReqNo:		'355376',
 			ReqTitle:	'住院工作月报台帐(1)',
 			ReqDesc:	'【操作步骤】(已完成)住院工作月报台帐(1)【预期结果】【实际结果】【说明】',
 			ReqAttach:  '无',
 			QCType:	    '质量检查-质检小组',
 			CompType:	'投诉类型',
 			CompContent:'投诉内容',
 			QGrade:	    '低',
 			QIssueType: '需求内容不清晰',
 			QIssueDesc: '需求各项描述都一样',
 			QIStatus:	'创建',
 			CaseReq:	'1',
 			ImpSugg:	'改进意见',
 			DelCenter:	'湖北交付中心',
 			Partition:	'湖北西北组',
 			Initiator:	'时培超',
 			InitGroup:	'湖北东风集团医院',
 			Receiver:	'陈乙',
 			RecGroup:	'综合查询',
 			Assigner:	'分配人',
 			CurrHandler:'时培超',
			PubDeadline:'公示截止日期',
 			ReleaseDate:'发布日期',
 			QIPeriodNo: '质检期数',
 			HighScore:	'最高分',
			LowScore:	'最低分',
 			AvgScore:	'平均分',
 			ScoreDiff:	'分差',
			ScoredPers: '已评分人员',
 			CurrGroup:	'湖北东风集团医院',
 			Creator:	'苑思琦',
 			CurrPerson: '当前人',
 			CreateDate: '2023-06-11',
        }];

        PHAIN_IMPORT.InitBox('导入入库信息', ImportCheck,
    	function(rows) {
        if (rows.length === 0) {
            components('Pop', '无明细数据!');
            return;
        }
        var hasOnlyReqNoData = true;
        var reqNoValues = [];
   
        for (var i = 0; i < rows.length; i++) {
            var row = rows[i];
            var keys = Object.keys(row);
            var hasValidReqNo = false;
            var hasOtherValidColumns = false;
            
            for (var j = 0; j < keys.length; j++) {
                var key = keys[j];
                var value = row[key];
                var isValidValue = value !== undefined && 
                                  value !== null && 
                                  value.toString().trim() !== '';
                
                if (key === 'ReqNo' || key === 'reqNo' || key === 'REQNO') {
                    if (isValidValue) {
                        hasValidReqNo = true;
                        reqNoValues.push(value.toString().trim());
                    }
                } else if (isValidValue) {
                    hasOtherValidColumns = true;
                }
            }
            if (!hasValidReqNo || hasOtherValidColumns) {
                hasOnlyReqNoData = false;
                break;
            }
        }
        if (hasOnlyReqNoData && reqNoValues.length > 0) {
            var uniqueReqNos = [...new Set(reqNoValues)];
            var reqNoString = uniqueReqNos.join(',');
            try {
                components('No', reqNoString);
            } catch(e) {
                $('#no').val(reqNoString);
            }
            var queryParams = {};
            queryParams.no = reqNoString;
            try {
                var mainObj = com.Condition('#qCondition', 'get', { dotype: 'save' });
                if (mainObj) {
                    queryParams = Object.assign({}, mainObj, queryParams);
                }
            } catch(e) {
                queryParams.startDate = "";
                queryParams.endDate = "";
                queryParams.operateType = "";
                queryParams.stkCatGrp = "";
                queryParams.purchUser = "";
                queryParams.status = "";
                queryParams.filterField = "";
            }
            PHA.Loading('Show');
            com.Invoke('GetMainRows', queryParams, function(retData) {
                PHA.Loading('Hide');
                if (retData && Array.isArray(retData) && retData.length > 0) {
                    PHA_GridEditor.LoadChangedRows('#gridItm', { 
                        total: retData.length, 
                        rows: retData 
                    });
                    components('Pop', '查询成功!共找到' + retData.length + '条数据。');
                } else {
                    components('Pop', '未找到匹配的数据!');
                    PHA_GridEditor.LoadChangedRows('#gridItm', { 
                        total: 0, 
                        rows: [] 
                    });
                }
                $('#ImportWin').dialog('close');
            }, function(error) {
                PHA.Loading('Hide');
                components('Pop', '查询失败:' + (error || '未知错误'));
                $('#ImportWin').dialog('close');
            });
            
            return;
        }
        
        // 否则,按照原来的逻辑执行(多列数据的情况)
        var mainObj = com.Condition('#qCondition', 'get', { dotype: 'save' });
        if (mainObj === undefined) {
            return;
        }
        var pJson = {
            main: mainObj,
            rows: rows
        };
        PHA.Loading('Show');
        var retData = com.InvokeSyn('GenerateImport', pJson);
        if (typeof retData === 'string') {
            PHAIN_IMPORT.Clear(); // 如果这里不清空,在excel编辑之后直接点击导入时无法读取文件,只能重新选取
            PHA.Loading('Hide');
            return;
        }
        var rows = retData.rows;
        PHA_GridEditor.LoadChangedRows('#gridItm', { total: rows.length, rows: rows });
        $('#ImportWin').dialog('close');
        PHA.Loading('Hide');
    }
);
    }

    setTimeout(function () {
        if (settings.Com.StkCatSet === 'Y') {
            PHA.DataPha.Set('stkCatGrp', { required: false });
        }
        $.extend(biz.getData('defaultData')[0], settings.App.DefaultData);

        SetDefaults();
        ControlOperation();
        $('body').on('click', function () {
            $('.tooltip').hide();
        });

        var banEditFields = [];
        if (settings.App.AllowInputRpAmt !== 'Y') {
            banEditFields.push('rpAmt');
        }
        if (settings.Com.RpRule == '2') {
            banEditFields.push('rp');
        }
        if (settings.Com.RpRule != '3') {
            banEditFields.push('sp');
        }
        com.BanGridEditors('#gridItm', banEditFields);
        if (settings.App.PurchaserNotNull !== 'Y') {
            // 采购员必填
            PHA.DataPha.Set('purchUser', { required: false });
        }
        PHA.SetRequired($('#qCondition [data-pha]'));
        com.SetPage('NTSC/NTSCReqQuaCont.csp');

        var topRecID = com.Top.Get('recID', true);
        if (topRecID !== '') {
            biz.setData('recID', topRecID);
        }
        // 由依据订单界面而来的数据, 嵌入界面的形式用此
        if (top.PHAINPO_TO_PHAINREC) {
            var topData = top.PHAINPO_TO_PHAINREC;
            PHA.SetVals([topData.main]);
            $('#gridItm').datagrid('loadData', {
                total: topData.rows.length,
                rows: topData.rows
            });
            $('#gridItm').parent().find('[datagrid-row-index] [field="qty"]').addClass('datagrid-value-changed');
            delete top.PHAINPO_TO_PHAINREC;
        }
        REC_QUICKMODIFY('gridItm', components, com);
        LoadCopyGo();
    }, 0);
});

3、主要的查询方法

/// Description: 需求质控列表查询
/// Debug:       w ##class(PHA.IN.REC.Query).GetMainRows({"startDate": "","operateType": "质量检查-质检小组","stkCatGrp": "","no": "","endDate": "","purchUser": "高,中","status": "","filterField": ""}).%ToJSON()
/// w ##class(PHA.IN.REC.Query).GetMainRows({"startDate":"","operateType":"质量检查-质检小组","stkCatGrp":"甘青交付中心","no":"","endDate":"","purchUser":"","status":"体检","filterField":""})
ClassMethod GetMainRows(pJson As %DynamicObject)
{
   
	s (preleth,rowData)=""  
    s pStartDate = $$$zdh(pJson.startDate)  
    s pEndDate = $$$zdh(pJson.endDate)  
    s operateType = pJson.operateType  
    s stkCatGrp = pJson.stkCatGrp  
    s no = pJson.no  
    s purchUser = pJson.purchUser  
    s status=pJson.status  
    s filterField = pJson.filterField  
      
    s sqlCode($i(sqlCode)) = " SELECT %ID ntscID"
    s sqlCode($i(sqlCode)) = " FROM NTSC_ReqQua WHERE 1=1"
    
    if (pStartDate'=""){
	    s sqlCode($i(sqlCode)) = "  and NTSC_CreateDate BETWEEN " _ pStartDate _ " AND " _ pEndDate _""  
	    }
	 // 处理质控类型 - 支持多选
    if (operateType '= "") {  
        s wherePart = ""
        s count = $l(operateType, ",")
        for i=1:1:count {
            s value = $p(operateType, ",", i)
            s value = $zstrip(value, "<>W")
            if (wherePart '= "") {
                s wherePart = wherePart _ " OR "
            }
            s wherePart = wherePart _ "NTSC_QCType LIKE '%" _ value _ "%'"
        }
        if (wherePart '= "") {
            s sqlCode($i(sqlCode)) = " AND (" _ wherePart _ ")"
        }
    }  
    
    // 处理交付中心 - 支持多选
    if (stkCatGrp '= "") {  
        s wherePart = ""
        s count = $l(stkCatGrp, ",")
        for i=1:1:count {
            s value = $p(stkCatGrp, ",", i)
            s value = $zstrip(value, "<>W")
            if (wherePart '= "") {
                s wherePart = wherePart _ " OR "
            }
            s wherePart = wherePart _ "NTSC_DelCenter LIKE '%" _ value _ "%'"
        }
        if (wherePart '= "") {
            s sqlCode($i(sqlCode)) = " AND (" _ wherePart _ ")"
        }
    }  
    
    // 处理需求序号 - 支持多选
    if (no '= "") {  
        s wherePart = ""
        s count = $l(no, ",")
        for i=1:1:count {
            s value = $p(no, ",", i)
            s value = $zstrip(value, "<>W")
            if (wherePart '= "") {
                s wherePart = wherePart _ " OR "
            }
            s wherePart = wherePart _ "NTSC_ReqNo LIKE '%" _ value _ "%'"
        }
        if (wherePart '= "") {
            s sqlCode($i(sqlCode)) = " AND (" _ wherePart _ ")"
        }
    }  
    
    // 处理质量分级 - 支持多选模糊查询
    if (purchUser '= "") {  
        s wherePart = ""
        s count = $l(purchUser, ",")
        for i=1:1:count {
            s value = $p(purchUser, ",", i)
            s value = $zstrip(value, "<>W")
            if (wherePart '= "") {
                s wherePart = wherePart _ " OR "
            }
            s wherePart = wherePart _ "NTSC_QGrade LIKE '%" _ value _ "%'"
        }
        if (wherePart '= "") {
            s sqlCode($i(sqlCode)) = " AND (" _ wherePart _ ")"
        }
    }  
    
    // 处理所属产品组 - 支持多选
    if (status '= "") {  
        s wherePart = ""
        s count = $l(status, ",")
        for i=1:1:count {
            s value = $p(status, ",", i)
            s value = $zstrip(value, "<>W")
            if (wherePart '= "") {
                s wherePart = wherePart _ " OR "
            }
            s wherePart = wherePart _ "NTSC_RecGroup LIKE '%" _ value _ "%'"
        }
        if (wherePart '= "") {
            s sqlCode($i(sqlCode)) = " AND (" _ wherePart _ ")"
        }
    }  
    
    // 处理需求标题 - 支持多选模糊查询
    if (filterField '= "") {  
        s wherePart = ""
        s count = $l(filterField, ",")
        for i=1:1:count {
            s value = $p(filterField, ",", i)
            s value = $zstrip(value, "<>W")
            if (wherePart '= "") {
                s wherePart = wherePart _ " OR "
            }
            s wherePart = wherePart _ "NTSC_ReqTitle LIKE '%" _ value _ "%'"
        }
        if (wherePart '= "") {
            s sqlCode($i(sqlCode)) = " AND (" _ wherePart _ ")"
        }
    }    
    #dim retArr as %DynamicArray = []
    s sqlResult = ##class(%SQL.Statement).%ExecDirect(.sqlStatement, .sqlCode)
    b ;1
    for {
        q:('sqlResult.%Next())
        s ntscID = sqlResult.%Get("ntscID")
        s recData = $g(^NTSCReqQua(ntscID))
        b ;0
        s rowData = ##class(NTSC.Pharmacy.ReqQuaCont.NTSCReqQuaCont).GetMainData(ntscID) 
        d retArr.%Push(rowData)
    }
    q retArr
}