diff --git a/backend/global/regex.go b/backend/global/regex.go index f85138b..2224441 100644 --- a/backend/global/regex.go +++ b/backend/global/regex.go @@ -34,36 +34,32 @@ func GetDefaultRegex() (reg Regex) { } // SetUserRegex set Regex.name = re -func (u *UserDatabase) SetUserRegex(id int, name, re string) error { - if name == "" || name == "ID" { - return ErrInvalidFieldName - } - if re == "" { +func (u *UserDatabase) SetUserRegex(id int, reg *Regex) error { + if reg == nil { return ErrEmptyRegex } user, err := UserDB.GetUserByID(id) if err != nil { return err } - if !user.IsFileManager() { + if !user.IsSuper() && id != *user.ID { return ErrInvalidRole } - _, err = regexp.Compile(re) - if err != nil { - return err - } - reg := GetDefaultRegex() - rreg := reflect.ValueOf(®).Elem() - f := rreg.FieldByName(name) - if !f.IsValid() { - return ErrNoSuchFieldName + defaultrf := reflect.ValueOf(GetDefaultRegex()) + rreg := reflect.ValueOf(reg).Elem() + for i := 1; i < rreg.NumField(); i++ { + if rreg.Field(i).Equal(defaultrf.Field(i)) { + rreg.Field(i).SetString("") + } else { + _, err = regexp.Compile(rreg.Field(i).String()) + if err != nil { + return err + } + } } u.mu.Lock() defer u.mu.Unlock() - _ = u.db.Find(UserTableRegex, ®, "WHERE ID="+strconv.Itoa(id)) - reg.ID = id - f.SetString(re) - return u.db.Insert(UserTableRegex, ®) + return u.db.Insert(UserTableRegex, reg) } // GetUserRegex default newRegex() @@ -72,7 +68,7 @@ func (u *UserDatabase) GetUserRegex(id int) (*Regex, error) { if err != nil { return nil, err } - if !user.IsFileManager() { + if !user.IsSuper() || id != *user.ID { return nil, ErrInvalidRole } u.mu.RLock() diff --git a/backend/global/user.go b/backend/global/user.go index 1ba05fe..170c27c 100644 --- a/backend/global/user.go +++ b/backend/global/user.go @@ -30,7 +30,6 @@ var ( ErrUsernameExists = errors.New("username exists") ErrInvalidName = errors.New("invalid name") ErrInvalidContact = errors.New("invalid contact") - ErrInvalidFieldName = errors.New("invalid field name") ErrNoSuchFieldName = errors.New("no such field name") ErrEmptyRegex = errors.New("empty regex") ) diff --git a/backend/regex.go b/backend/regex.go index 6328819..5511e6e 100644 --- a/backend/regex.go +++ b/backend/regex.go @@ -1,6 +1,7 @@ package backend import ( + "encoding/json" "net/http" "github.com/fumiama/paper-manager/backend/global" @@ -23,4 +24,26 @@ func init() { } writeresult(w, codeSuccess, reg, messageOk, typeSuccess) }} + + apimap["/api/setUserRegex"] = &apihandler{"POST", func(w http.ResponseWriter, r *http.Request) { + token := r.Header.Get("Authorization") + user := usertokens.Get(token) + if user == nil { + writeresult(w, codeError, nil, errInvalidToken.Error(), typeError) + return + } + defer r.Body.Close() + reg := &global.Regex{} + err := json.NewDecoder(r.Body).Decode(reg) + if err != nil { + writeresult(w, codeError, nil, err.Error(), typeError) + return + } + err = global.UserDB.SetUserRegex(*user.ID, reg) + if err != nil { + writeresult(w, codeError, nil, err.Error(), typeError) + return + } + writeresult(w, codeSuccess, "成功", messageOk, typeSuccess) + }} } diff --git a/frontend/vben/src/api/dashboard/index.ts b/frontend/vben/src/api/dashboard/index.ts index 61556f0..9e48662 100644 --- a/frontend/vben/src/api/dashboard/index.ts +++ b/frontend/vben/src/api/dashboard/index.ts @@ -7,6 +7,7 @@ enum Api { DeleteMessage = '/delMessage', GetAnnualVisits = '/getAnnualVisits', GetUserRegex = '/getUserRegex', + SetUserRegex = '/setUserRegex', } export const getAnnualVisits = () => { @@ -28,3 +29,7 @@ export const deleteMessage = (id: number) => { export const getUserRegex = () => { return defHttp.get({ url: Api.GetUserRegex }) } + +export const setUserRegex = (params: UserRegex) => { + return defHttp.post({ url: Api.SetUserRegex, params }) +} diff --git a/frontend/vben/src/views/dashboard/regex/data.ts b/frontend/vben/src/views/dashboard/regex/data.ts index 55dec1c..c2e8894 100644 --- a/frontend/vben/src/views/dashboard/regex/data.ts +++ b/frontend/vben/src/views/dashboard/regex/data.ts @@ -8,56 +8,56 @@ const userregex = await getUserRegex() export const schemas: FormSchema[] = [ { - field: 'title', + field: 'Title', component: 'Input', colProps, label: '试卷标题', defaultValue: userregex.Title, }, { - field: 'class', + field: 'Class', component: 'Input', colProps, label: '课程名称', defaultValue: userregex.Class, }, { - field: 'opencl', + field: 'OpenCl', component: 'Input', colProps, label: '开/闭卷', defaultValue: userregex.OpenCl, }, { - field: 'date', + field: 'Date', component: 'Input', colProps, label: '考试日期', defaultValue: userregex.Date, }, { - field: 'time', + field: 'Time', component: 'Input', colProps, label: '考试时长', defaultValue: userregex.Time, }, { - field: 'rate', + field: 'Rate', component: 'Input', colProps, label: '成绩占比', defaultValue: userregex.Rate, }, { - field: 'major', + field: 'Major', component: 'Input', colProps, label: '大题题号', defaultValue: userregex.Major, }, { - field: 'sub', + field: 'Sub', component: 'Input', colProps, label: '小题题号', diff --git a/frontend/vben/src/views/dashboard/regex/index.vue b/frontend/vben/src/views/dashboard/regex/index.vue index 1f56e9e..667e2ae 100644 --- a/frontend/vben/src/views/dashboard/regex/index.vue +++ b/frontend/vben/src/views/dashboard/regex/index.vue @@ -2,7 +2,7 @@ @@ -15,6 +15,7 @@ import { useMessage } from '/@/hooks/web/useMessage' import { PageWrapper } from '/@/components/Page' import { useI18n } from '/@/hooks/web/useI18n' + import { setUserRegex } from '/@/api/dashboard' export default defineComponent({ name: 'FormBasicPage', @@ -42,20 +43,20 @@ async function customSubmitFunc() { try { - await validate() + const data = await validate() + if (!data) return setProps({ submitButtonOptions: { loading: true, }, }) - setTimeout(() => { - setProps({ - submitButtonOptions: { - loading: false, - }, - }) - createMessage.success('提交成功!') - }, 2000) + const msg = await setUserRegex(data) + setProps({ + submitButtonOptions: { + loading: false, + }, + }) + createMessage.success(msg) } catch (error) {} }