useFormDataInjection.js 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // 所有用户注册相关model,rules集中管理
  2. // 因为不同的功能场景有时候需要的字段有差异,这里分割成了多个版块,但使用模式均保持一致
  3. import {computed, ref} from 'vue'
  4. import {injectLocal, provideLocal} from "@vueuse/core";
  5. import {mobile} from "@/uni_modules/uv-ui-tools/libs/function/test";
  6. import _ from "lodash";
  7. const key = Symbol('FORM_DATA')
  8. export const useProvideFormData = function (pureModel, overrideRules = {}) {
  9. const transform = (v) => v + '' // 有时纯数值检验需要转化一下才能起效
  10. const model = ref(pureModel)
  11. const allRules = ref({
  12. mobile: [
  13. {required: true, message: '请输入手机号码', trigger: 'error-change'},
  14. {
  15. validator: (r, v, cb) => {
  16. if (mobile(v)) cb()
  17. else cb(r.message)
  18. },
  19. message: '手机号码格式不正确',
  20. trigger: 'error-change'
  21. }
  22. ],
  23. smsCode: [{required: true, message: '请输入验证码', trigger: 'error-change'}],
  24. username: [{required: true, message: '请输入手机号/卡号', trigger: 'error-change'}],
  25. password: [{required: true, message: '请输入密码', trigger: 'error-change'}],
  26. oldPassword: [{required: true, message: '请输入旧密码', trigger: 'error-change'}],
  27. newPassword: [
  28. {required: true, message: '请输入新密码', trigger: 'error-change'},
  29. {
  30. min: 6,
  31. max: 20,
  32. message: '新密码长度在6-20个字符之间',
  33. trigger: 'error-change'
  34. }
  35. ],
  36. newPwdRepeat: [
  37. {required: true, message: '请输入确认密码', trigger: 'error-change'},
  38. {
  39. validator: (r, v, cb) => {
  40. const valid = v == model.value.newPassword
  41. const params = valid ? undefined : new Error(r.message)
  42. cb(params)
  43. },
  44. message: '确认密码与新密码不一致',
  45. trigger: 'error-change'
  46. }
  47. ],
  48. nickName: [{required: true, message: '请输入学生姓名', trigger: 'error-change'}],
  49. sex: [{required: true, message: '请选择学生性别', trigger: 'error-change'}],
  50. provinceName: [{required: true, message: '请选择所在省份', trigger: 'error-change'}],
  51. examType: [{required: true, message: '请选择考生类别', trigger: 'error-change'}],
  52. examMajor: [{required: true, message: '请选择专业类别', trigger: 'error-change'}],
  53. schoolId: [{required: true, message: '请选择学校', transform, trigger: 'error-change'}],
  54. customSchoolName: [{required: true, message: '请输入学校名称', trigger: 'error-change'}],
  55. customClassName: [{required: true, message: '请输入班级名称', trigger: 'error-change'}],
  56. ...overrideRules
  57. })
  58. const rules = computed(() => _.pick(allRules.value, _.keys(model.value)))
  59. const provide = [model, rules]
  60. provideLocal(key, provide)
  61. return provide
  62. }
  63. export const useInjectFormData = function () {
  64. return injectLocal(key)
  65. }