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:
@@ -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(®).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, ®, "WHERE ID="+strconv.Itoa(id))
|
return u.db.Insert(UserTableRegex, reg)
|
||||||
reg.ID = id
|
|
||||||
f.SetString(re)
|
|
||||||
return u.db.Insert(UserTableRegex, ®)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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()
|
||||||
|
|||||||
@@ -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")
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
}}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 })
|
||||||
|
}
|
||||||
|
|||||||
@@ -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: '小题题号',
|
||||||
|
|||||||
@@ -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) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user