From 2f80eaaf9c4e5dcac134af5cbea353dac69ceaec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?piexlMax=28=E5=A5=87=E6=B7=BC?= Date: Wed, 21 May 2025 17:11:23 +0800 Subject: [PATCH] =?UTF-8?q?fix(exportTemplate):=20=E6=B7=BB=E5=8A=A0IN?= =?UTF-8?q?=E5=92=8CNOT=20IN=E6=93=8D=E4=BD=9C=E7=AC=A6=E5=B9=B6=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=8F=82=E6=95=B0=E8=A7=A3=E6=9E=90=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在导出模板功能中添加IN和NOT IN操作符,以支持更复杂的查询条件。同时修复了参数解析逻辑,确保从params参数中正确提取过滤条件、分页和排序等参数,避免直接使用values导致的解析错误。 --- server/service/system/sys_export_template.go | 17 +++++++++++------ .../exportTemplate/exportTemplate.vue | 10 +++++++++- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/server/service/system/sys_export_template.go b/server/service/system/sys_export_template.go index ff1c2efe..869ed11e 100644 --- a/server/service/system/sys_export_template.go +++ b/server/service/system/sys_export_template.go @@ -128,6 +128,11 @@ func (sysExportTemplateService *SysExportTemplateService) GetSysExportTemplateIn // ExportExcel 导出Excel // Author [piexlmax](https://github.com/piexlmax) func (sysExportTemplateService *SysExportTemplateService) ExportExcel(templateID string, values url.Values) (file *bytes.Buffer, name string, err error) { + var params = values.Get("params") + paramsValues, err := url.ParseQuery(params) + if err != nil { + return nil, "", fmt.Errorf("解析 params 参数失败: %v", err) + } var template system.SysExportTemplate err = global.GVA_DB.Preload("Conditions").Preload("JoinTemplate").First(&template, "template_id = ?", templateID).Error if err != nil { @@ -178,7 +183,7 @@ func (sysExportTemplateService *SysExportTemplateService) ExportExcel(templateID filterDeleted := false - filterParam := values.Get("filterDeleted") + filterParam := paramsValues.Get("filterDeleted") if filterParam == "true" { filterDeleted = true } @@ -202,7 +207,7 @@ func (sysExportTemplateService *SysExportTemplateService) ExportExcel(templateID if len(template.Conditions) > 0 { for _, condition := range template.Conditions { sql := fmt.Sprintf("%s %s ?", condition.Column, condition.Operator) - value := values.Get(condition.From) + value := paramsValues.Get(condition.From) if value != "" { if condition.Operator == "LIKE" { value = "%" + value + "%" @@ -212,7 +217,7 @@ func (sysExportTemplateService *SysExportTemplateService) ExportExcel(templateID } } // 通过参数传入limit - limit := values.Get("limit") + limit := paramsValues.Get("limit") if limit != "" { l, e := strconv.Atoi(limit) if e == nil { @@ -225,7 +230,7 @@ func (sysExportTemplateService *SysExportTemplateService) ExportExcel(templateID } // 通过参数传入offset - offset := values.Get("offset") + offset := paramsValues.Get("offset") if offset != "" { o, e := strconv.Atoi(offset) if e == nil { @@ -248,7 +253,7 @@ func (sysExportTemplateService *SysExportTemplateService) ExportExcel(templateID } // 通过参数传入order - order := values.Get("order") + order := paramsValues.Get("order") if order == "" && template.Order != "" { // 如果没有order入参,这里会使用模板的默认排序 @@ -429,7 +434,7 @@ func (sysExportTemplateService *SysExportTemplateService) ImportExcel(templateID for _, row := range values { var item = make(map[string]interface{}) for ii, value := range row { - if _, ok := titleKeyMap[excelTitle[ii]]; !ok { + if _, ok := titleKeyMap[excelTitle[ii]]; !ok { continue // excel中多余的标题,在模板信息中没有对应的字段,因此key为空,必须跳过 } key := titleKeyMap[excelTitle[ii]] diff --git a/web/src/view/systemTools/exportTemplate/exportTemplate.vue b/web/src/view/systemTools/exportTemplate/exportTemplate.vue index 91365568..86449bfa 100644 --- a/web/src/view/systemTools/exportTemplate/exportTemplate.vue +++ b/web/src/view/systemTools/exportTemplate/exportTemplate.vue @@ -509,7 +509,15 @@ JOINS模式下不支持导入 { label: 'NOT BETWEEN', value: 'NOT BETWEEN' - } + }, + { + label: 'IN', + value: 'IN' + }, + { + label: 'NOT IN', + value: 'NOT IN' + }, ]) const addCondition = () => {