|
@@ -1,152 +1,157 @@
|
|
|
export default {
|
|
|
- // NOTE:有机会统一注册、用户中心的表单逻辑
|
|
|
- data() {
|
|
|
- return {
|
|
|
- fullRules: {
|
|
|
- username: [{
|
|
|
- required: true,
|
|
|
- message: '姓名必填',
|
|
|
- trigger: 'change'
|
|
|
- }],
|
|
|
- sex: [{
|
|
|
- required: true,
|
|
|
- message: '性别必填',
|
|
|
- trigger: 'blur'
|
|
|
- }],
|
|
|
- schoolId: [{
|
|
|
- required: true,
|
|
|
- message: '学校必填',
|
|
|
- trigger: 'change'
|
|
|
- }],
|
|
|
- subjectid: [{
|
|
|
- required: true,
|
|
|
- message: '科目必填',
|
|
|
- access: ['isFrontTeacher'],
|
|
|
- trigger: 'change',
|
|
|
- validator: (r, v, cb) => cb(v > 0 ? undefined : new Error(r.message))
|
|
|
- }],
|
|
|
- year: [{
|
|
|
- required: true,
|
|
|
- message: '学年必填',
|
|
|
- trigger: 'change'
|
|
|
- }],
|
|
|
- // sno: [{
|
|
|
- // required: true,
|
|
|
- // message: '学号必填',
|
|
|
- // access: ['isFrontStudent'],
|
|
|
- // trigger: 'blur'
|
|
|
- // }],
|
|
|
- clazzId: [{
|
|
|
- required: true,
|
|
|
- message: '班级必填',
|
|
|
- access: ['isFrontStudent'],
|
|
|
- trigger: 'change',
|
|
|
- validator: (r, v, cb) => cb(v?.length > 0 ? undefined : new Error(r.message))
|
|
|
- }],
|
|
|
- gradeClass: [{
|
|
|
- required: true,
|
|
|
- message: '年级组必填',
|
|
|
- access: ['isFrontTeacher'],
|
|
|
- trigger: 'change',
|
|
|
- validator: (r, v, cb) => cb(v?.length > 0 ? undefined : new Error(r.message))
|
|
|
- }],
|
|
|
- isHeadteacher: [{
|
|
|
- required: true,
|
|
|
- message: '班主任必填',
|
|
|
- access: ['isFrontTeacher'],
|
|
|
- trigger: 'change',
|
|
|
- validator: (r, v, cb) => cb()
|
|
|
- }],
|
|
|
- headteacherClassId: [{
|
|
|
- required: true,
|
|
|
- message: '带班必填',
|
|
|
- access: ['isFrontTeacher'],
|
|
|
- trigger: 'change',
|
|
|
- validator: (r, v, cb) => cb(v > 0 ? undefined : new Error(r.message))
|
|
|
- }],
|
|
|
- phoneNumber: [{
|
|
|
- required: true,
|
|
|
- message: '手机号必填',
|
|
|
- access: [],
|
|
|
- trigger: 'change'
|
|
|
- }, {
|
|
|
- pattern: /^\d{11}$/,
|
|
|
- message: '手机号格式不正确',
|
|
|
- access: [],
|
|
|
- trigger: 'change'
|
|
|
- }],
|
|
|
- code: [{
|
|
|
- required: true,
|
|
|
- message: '验证码必填',
|
|
|
- access: [],
|
|
|
- trigger: 'change'
|
|
|
- }]
|
|
|
- },
|
|
|
- rawClassTree: null,
|
|
|
- }
|
|
|
- },
|
|
|
- computed: {
|
|
|
- classTree() {
|
|
|
- if (!this.rawClassTree?.length) return [];
|
|
|
- // 转化为 element-ui 标准格式
|
|
|
- return this.rawClassTree.map((grade) => ({
|
|
|
- label: grade.name,
|
|
|
- value: grade.grade,
|
|
|
- children: grade.classList.map((clazz) => ({
|
|
|
- label: clazz.className,
|
|
|
- value: clazz.classId,
|
|
|
- })),
|
|
|
- }));
|
|
|
- },
|
|
|
+ // NOTE:有机会统一注册、用户中心的表单逻辑
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ fullRules: {
|
|
|
+ username: [{
|
|
|
+ required: true,
|
|
|
+ message: '姓名必填',
|
|
|
+ trigger: 'change'
|
|
|
+ }],
|
|
|
+ sex: [{
|
|
|
+ required: true,
|
|
|
+ message: '性别必填',
|
|
|
+ trigger: 'blur'
|
|
|
+ }],
|
|
|
+ schoolId: [{
|
|
|
+ required: true,
|
|
|
+ message: '学校必填',
|
|
|
+ trigger: 'change'
|
|
|
+ }],
|
|
|
+ subjectid: [{
|
|
|
+ required: true,
|
|
|
+ message: '科目必填',
|
|
|
+ access: ['isFrontTeacher'],
|
|
|
+ trigger: 'change',
|
|
|
+ validator: (r, v, cb) => cb(v > 0 ? undefined : new Error(r.message))
|
|
|
+ }],
|
|
|
+ year: [{
|
|
|
+ required: true,
|
|
|
+ message: '学年必填',
|
|
|
+ trigger: 'change'
|
|
|
+ }],
|
|
|
+ // sno: [{
|
|
|
+ // required: true,
|
|
|
+ // message: '学号必填',
|
|
|
+ // access: ['isFrontStudent'],
|
|
|
+ // trigger: 'blur'
|
|
|
+ // }],
|
|
|
+ clazzId: [{
|
|
|
+ required: true,
|
|
|
+ message: '班级必填',
|
|
|
+ access: ['isFrontStudent'],
|
|
|
+ trigger: 'change',
|
|
|
+ validator: (r, v, cb) => cb(v?.length > 0 ? undefined : new Error(r.message))
|
|
|
+ }],
|
|
|
+ gradeClass: [{
|
|
|
+ required: true,
|
|
|
+ message: '年级组必填',
|
|
|
+ access: ['isFrontTeacher'],
|
|
|
+ trigger: 'change',
|
|
|
+ validator: (r, v, cb) => cb(v?.length > 0 ? undefined : new Error(r.message))
|
|
|
+ }],
|
|
|
+ isHeadteacher: [{
|
|
|
+ required: true,
|
|
|
+ message: '班主任必填',
|
|
|
+ access: ['isFrontTeacher'],
|
|
|
+ trigger: 'change',
|
|
|
+ validator: (r, v, cb) => cb()
|
|
|
+ }],
|
|
|
+ headteacherClassId: [{
|
|
|
+ required: true,
|
|
|
+ message: '带班必填',
|
|
|
+ access: ['isFrontTeacher'],
|
|
|
+ trigger: 'change',
|
|
|
+ validator: (r, v, cb) => cb(v > 0 ? undefined : new Error(r.message))
|
|
|
+ }],
|
|
|
+ phoneNumber: [{
|
|
|
+ required: true,
|
|
|
+ message: '手机号必填',
|
|
|
+ access: [],
|
|
|
+ trigger: 'change'
|
|
|
+ }, {
|
|
|
+ pattern: /^\d{11}$/,
|
|
|
+ message: '手机号格式不正确',
|
|
|
+ access: [],
|
|
|
+ trigger: 'change'
|
|
|
+ }],
|
|
|
+ code: [{
|
|
|
+ required: true,
|
|
|
+ message: '验证码必填',
|
|
|
+ access: [],
|
|
|
+ trigger: 'change'
|
|
|
+ }]
|
|
|
+ },
|
|
|
+ rawClassTree: null
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ classTree() {
|
|
|
+ if (!this.rawClassTree?.length) return []
|
|
|
+ // 转化为 element-ui 标准格式
|
|
|
+ return this.rawClassTree.map((grade) => ({
|
|
|
+ label: grade.name,
|
|
|
+ value: grade.grade,
|
|
|
+ children: grade.classList.map((clazz) => ({
|
|
|
+ label: clazz.className,
|
|
|
+ value: clazz.classId
|
|
|
+ }))
|
|
|
+ }))
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ extractUserRules(form) {
|
|
|
+ const resultRules = {}
|
|
|
+ Object.keys(form).forEach(prop => {
|
|
|
+ const rules = this.fullRules[prop]
|
|
|
+ if (!rules?.length) return
|
|
|
+ const filterRules = rules.filter(rule => {
|
|
|
+ if (rule.access?.length > 0) {
|
|
|
+ return rule.access.some(getter => this.$store.getters[getter])
|
|
|
+ } else {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if (filterRules.length) resultRules[prop] = filterRules
|
|
|
+ })
|
|
|
+ console.log('extractUserRules', resultRules)
|
|
|
+ return resultRules
|
|
|
},
|
|
|
- methods: {
|
|
|
- extractUserRules(form) {
|
|
|
- const resultRules = {}
|
|
|
- Object.keys(form).forEach(prop => {
|
|
|
- const rules = this.fullRules[prop]
|
|
|
- if (!rules?.length) return
|
|
|
- const filterRules = rules.filter(rule => {
|
|
|
- if (rule.access?.length > 0) {
|
|
|
- return rule.access.some(getter => this.$store.getters[getter])
|
|
|
- } else {
|
|
|
- return true
|
|
|
- }
|
|
|
- })
|
|
|
- if (filterRules.length) resultRules[prop] = filterRules
|
|
|
- })
|
|
|
- console.log('extractUserRules', resultRules)
|
|
|
- return resultRules
|
|
|
- },
|
|
|
- formDataToPostData(form) {
|
|
|
- const data = this.deepClone(form)
|
|
|
- // subjectIds
|
|
|
- if (data.subjectid) data.subjectIds = [data.subjectid]
|
|
|
- // grade class
|
|
|
- if (form.clazzId?.length == 2) {
|
|
|
- const [gradeId, classId] = form.clazzId
|
|
|
- data.gradeClass = [{
|
|
|
- grade: gradeId,
|
|
|
- classList: [{ classId }]
|
|
|
- }]
|
|
|
- } else if (form.gradeClass.length > 0) {
|
|
|
- data.gradeClass = []
|
|
|
- form.gradeClass.forEach(pair => {
|
|
|
- if (pair.length != 2) return
|
|
|
- const [gradeId, classId] = pair
|
|
|
- let exist = data.gradeClass.find(g => g.grade == gradeId)
|
|
|
- if (!exist) {
|
|
|
- exist = {
|
|
|
- grade: gradeId,
|
|
|
- classList: []
|
|
|
- }
|
|
|
- data.gradeClass.push(exist)
|
|
|
- }
|
|
|
- exist.classList.push({ classId })
|
|
|
- })
|
|
|
- } else {
|
|
|
- delete data.gradeClass
|
|
|
+ formDataToPostData(form, rawClassTree) {
|
|
|
+ const data = this.deepClone(form)
|
|
|
+ let maxYear = ''
|
|
|
+ // subjectIds
|
|
|
+ if (data.subjectid) data.subjectIds = [data.subjectid]
|
|
|
+ // grade class
|
|
|
+ if (form.clazzId?.length == 2) {
|
|
|
+ const [gradeId, classId] = form.clazzId
|
|
|
+ data.gradeClass = [{
|
|
|
+ grade: gradeId,
|
|
|
+ classList: [{ classId }]
|
|
|
+ }]
|
|
|
+ maxYear = rawClassTree.find(g => g.grade == gradeId).year
|
|
|
+ } else if (form.gradeClass.length > 0) {
|
|
|
+ data.gradeClass = []
|
|
|
+ form.gradeClass.forEach(pair => {
|
|
|
+ if (pair.length != 2) return
|
|
|
+ const [gradeId, classId] = pair
|
|
|
+ let exist = data.gradeClass.find(g => g.grade == gradeId)
|
|
|
+ if (!exist) {
|
|
|
+ exist = {
|
|
|
+ grade: gradeId,
|
|
|
+ classList: []
|
|
|
}
|
|
|
- return data
|
|
|
- }
|
|
|
+ data.gradeClass.push(exist)
|
|
|
+ }
|
|
|
+ exist.classList.push({ classId })
|
|
|
+ const currentYear = rawClassTree.find(g => g.grade == gradeId).year
|
|
|
+ maxYear = Math.max(currentYear, maxYear)
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ delete data.gradeClass
|
|
|
+ }
|
|
|
+ data.year = maxYear
|
|
|
+ return data
|
|
|
}
|
|
|
+ }
|
|
|
}
|