1
0
mirror of https://github.com/fumiama/paper-manager.git synced 2026-06-23 20:16:28 +08:00

finish regex

This commit is contained in:
源文雨
2023-04-22 15:14:24 +08:00
parent 282c9539ec
commit 9d9e04ebd2
6 changed files with 63 additions and 39 deletions

View File

@@ -34,36 +34,32 @@ func GetDefaultRegex() (reg Regex) {
} }
// SetUserRegex set Regex.name = re // SetUserRegex set Regex.name = re
func (u *UserDatabase) SetUserRegex(id int, name, re string) error { func (u *UserDatabase) SetUserRegex(id int, reg *Regex) error {
if name == "" || name == "ID" { if reg == nil {
return ErrInvalidFieldName
}
if re == "" {
return ErrEmptyRegex return ErrEmptyRegex
} }
user, err := UserDB.GetUserByID(id) user, err := UserDB.GetUserByID(id)
if err != nil { if err != nil {
return err return err
} }
if !user.IsFileManager() { if !user.IsSuper() && id != *user.ID {
return ErrInvalidRole return ErrInvalidRole
} }
_, err = regexp.Compile(re) defaultrf := reflect.ValueOf(GetDefaultRegex())
if err != nil { rreg := reflect.ValueOf(reg).Elem()
return err for i := 1; i < rreg.NumField(); i++ {
} if rreg.Field(i).Equal(defaultrf.Field(i)) {
reg := GetDefaultRegex() rreg.Field(i).SetString("")
rreg := reflect.ValueOf(&reg).Elem() } else {
f := rreg.FieldByName(name) _, err = regexp.Compile(rreg.Field(i).String())
if !f.IsValid() { if err != nil {
return ErrNoSuchFieldName return err
}
}
} }
u.mu.Lock() u.mu.Lock()
defer u.mu.Unlock() defer u.mu.Unlock()
_ = u.db.Find(UserTableRegex, &reg, "WHERE ID="+strconv.Itoa(id)) return u.db.Insert(UserTableRegex, reg)
reg.ID = id
f.SetString(re)
return u.db.Insert(UserTableRegex, &reg)
} }
// GetUserRegex default newRegex() // GetUserRegex default newRegex()
@@ -72,7 +68,7 @@ func (u *UserDatabase) GetUserRegex(id int) (*Regex, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
if !user.IsFileManager() { if !user.IsSuper() || id != *user.ID {
return nil, ErrInvalidRole return nil, ErrInvalidRole
} }
u.mu.RLock() u.mu.RLock()

View File

@@ -30,7 +30,6 @@ var (
ErrUsernameExists = errors.New("username exists") ErrUsernameExists = errors.New("username exists")
ErrInvalidName = errors.New("invalid name") ErrInvalidName = errors.New("invalid name")
ErrInvalidContact = errors.New("invalid contact") ErrInvalidContact = errors.New("invalid contact")
ErrInvalidFieldName = errors.New("invalid field name")
ErrNoSuchFieldName = errors.New("no such field name") ErrNoSuchFieldName = errors.New("no such field name")
ErrEmptyRegex = errors.New("empty regex") ErrEmptyRegex = errors.New("empty regex")
) )

View File

@@ -1,6 +1,7 @@
package backend package backend
import ( import (
"encoding/json"
"net/http" "net/http"
"github.com/fumiama/paper-manager/backend/global" "github.com/fumiama/paper-manager/backend/global"
@@ -23,4 +24,26 @@ func init() {
} }
writeresult(w, codeSuccess, reg, messageOk, typeSuccess) 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)
}}
} }

View File

@@ -7,6 +7,7 @@ enum Api {
DeleteMessage = '/delMessage', DeleteMessage = '/delMessage',
GetAnnualVisits = '/getAnnualVisits', GetAnnualVisits = '/getAnnualVisits',
GetUserRegex = '/getUserRegex', GetUserRegex = '/getUserRegex',
SetUserRegex = '/setUserRegex',
} }
export const getAnnualVisits = () => { export const getAnnualVisits = () => {
@@ -28,3 +29,7 @@ export const deleteMessage = (id: number) => {
export const getUserRegex = () => { export const getUserRegex = () => {
return defHttp.get<UserRegex>({ url: Api.GetUserRegex }) return defHttp.get<UserRegex>({ url: Api.GetUserRegex })
} }
export const setUserRegex = (params: UserRegex) => {
return defHttp.post<string>({ url: Api.SetUserRegex, params })
}

View File

@@ -8,56 +8,56 @@ const userregex = await getUserRegex()
export const schemas: FormSchema[] = [ export const schemas: FormSchema[] = [
{ {
field: 'title', field: 'Title',
component: 'Input', component: 'Input',
colProps, colProps,
label: '试卷标题', label: '试卷标题',
defaultValue: userregex.Title, defaultValue: userregex.Title,
}, },
{ {
field: 'class', field: 'Class',
component: 'Input', component: 'Input',
colProps, colProps,
label: '课程名称', label: '课程名称',
defaultValue: userregex.Class, defaultValue: userregex.Class,
}, },
{ {
field: 'opencl', field: 'OpenCl',
component: 'Input', component: 'Input',
colProps, colProps,
label: '开/闭卷', label: '开/闭卷',
defaultValue: userregex.OpenCl, defaultValue: userregex.OpenCl,
}, },
{ {
field: 'date', field: 'Date',
component: 'Input', component: 'Input',
colProps, colProps,
label: '考试日期', label: '考试日期',
defaultValue: userregex.Date, defaultValue: userregex.Date,
}, },
{ {
field: 'time', field: 'Time',
component: 'Input', component: 'Input',
colProps, colProps,
label: '考试时长', label: '考试时长',
defaultValue: userregex.Time, defaultValue: userregex.Time,
}, },
{ {
field: 'rate', field: 'Rate',
component: 'Input', component: 'Input',
colProps, colProps,
label: '成绩占比', label: '成绩占比',
defaultValue: userregex.Rate, defaultValue: userregex.Rate,
}, },
{ {
field: 'major', field: 'Major',
component: 'Input', component: 'Input',
colProps, colProps,
label: '大题题号', label: '大题题号',
defaultValue: userregex.Major, defaultValue: userregex.Major,
}, },
{ {
field: 'sub', field: 'Sub',
component: 'Input', component: 'Input',
colProps, colProps,
label: '小题题号', label: '小题题号',

View File

@@ -2,7 +2,7 @@
<PageWrapper <PageWrapper
:title="t('routes.dashboard.regex')" :title="t('routes.dashboard.regex')"
contentBackground contentBackground
content=" 表单页用于向用户收集或验证信息,基础表单常见于数据项较少的表单场景。" content="设置试卷解析/查重时使用的正则表达式"
contentClass="p-4" contentClass="p-4"
> >
<BasicForm @register="register" /> <BasicForm @register="register" />
@@ -15,6 +15,7 @@
import { useMessage } from '/@/hooks/web/useMessage' import { useMessage } from '/@/hooks/web/useMessage'
import { PageWrapper } from '/@/components/Page' import { PageWrapper } from '/@/components/Page'
import { useI18n } from '/@/hooks/web/useI18n' import { useI18n } from '/@/hooks/web/useI18n'
import { setUserRegex } from '/@/api/dashboard'
export default defineComponent({ export default defineComponent({
name: 'FormBasicPage', name: 'FormBasicPage',
@@ -42,20 +43,20 @@
async function customSubmitFunc() { async function customSubmitFunc() {
try { try {
await validate() const data = await validate()
if (!data) return
setProps({ setProps({
submitButtonOptions: { submitButtonOptions: {
loading: true, loading: true,
}, },
}) })
setTimeout(() => { const msg = await setUserRegex(data)
setProps({ setProps({
submitButtonOptions: { submitButtonOptions: {
loading: false, loading: false,
}, },
}) })
createMessage.success('提交成功!') createMessage.success(msg)
}, 2000)
} catch (error) {} } catch (error) {}
} }