From 14eed7265c4b2d34440208cdc891dee4a2a0b093 Mon Sep 17 00:00:00 2001 From: wsczx Date: Fri, 25 Nov 2022 17:38:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=8F=AF=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E4=BB=BB=E6=84=8F=E5=90=8D=E7=A7=B0=E7=94=A8=E6=88=B7=E7=BB=84?= =?UTF-8?q?=E7=9A=84bug=EF=BC=8C=E6=B7=BB=E5=8A=A0=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=A4=9A=E4=B8=AA=E7=94=A8=E6=88=B7=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/admin/api_uploaduser.go | 27 ++++++++++++++++++++++----- web/public/批量添加用户模版.xlsx | Bin 14214 -> 14381 bytes 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/server/admin/api_uploaduser.go b/server/admin/api_uploaduser.go index 2a22e07..43b4650 100644 --- a/server/admin/api_uploaduser.go +++ b/server/admin/api_uploaduser.go @@ -12,6 +12,7 @@ import ( "github.com/bjdgyc/anylink/base" "github.com/bjdgyc/anylink/dbdata" "github.com/bjdgyc/anylink/pkg/utils" + mapset "github.com/deckarep/golang-set" "github.com/spf13/cast" "github.com/xuri/excelize/v2" ) @@ -56,7 +57,11 @@ func UploadUser(file string) error { if rows[0][0] != "id" || rows[0][1] != "username" || rows[0][2] != "nickname" || rows[0][3] != "email" || rows[0][4] != "pin_code" || rows[0][5] != "limittime" || rows[0][6] != "otp_secret" || rows[0][7] != "disable_otp" || rows[0][8] != "groups" || rows[0][9] != "status" || rows[0][10] != "send_email" { return fmt.Errorf("批量添加失败,表格格式不正确") } - for index, row := range rows[:] { + var k []interface{} + for _, v := range dbdata.GetGroupNames() { + k = append(k, v) + } + for index, row := range rows { if index == 0 { continue } @@ -66,7 +71,17 @@ func UploadUser(file string) error { } limittime, _ := time.ParseInLocation("2006-01-02 15:04:05", row[5], time.Local) disableOtp, _ := strconv.ParseBool(row[7]) - group := []string{row[8]} + var group []string + if row[8] == "" { + return fmt.Errorf("第%d行数据错误,用户组不允许为空", index) + } + for _, v := range strings.Split(row[8], ",") { + if s := mapset.NewSetFromSlice(k); s.Contains(v) { + group = append(group, v) + } else { + return fmt.Errorf("用户组【%s】不存在,请检查第%d行数据", v, index) + } + } status := cast.ToInt8(row[9]) sendmail, _ := strconv.ParseBool(row[10]) // createdAt, _ := time.ParseInLocation("2006-01-02 15:04:05", row[11], time.Local) @@ -87,10 +102,12 @@ func UploadUser(file string) error { // UpdatedAt: updatedAt, } if err := dbdata.AddBatch(user); err != nil { - return fmt.Errorf("请检查是否导入有重复用户") + return fmt.Errorf("请检查第%d行数据是否导入有重复用户", index) } - if err := userAccountMail(user); user.SendEmail && err != nil { - return err + if user.SendEmail { + if err := userAccountMail(user); err != nil { + return err + } } } return nil diff --git a/web/public/批量添加用户模版.xlsx b/web/public/批量添加用户模版.xlsx index a3cf8c3cda369aac4958ddc88b67b578def9e829..5405de76801df05fcb1813700aa8c670e7acf534 100755 GIT binary patch delta 6781 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