defineFormModels.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. import _ from "lodash";
  2. import {toValue} from 'vue'
  3. export const createRegisterModelRules = function () {
  4. // 新用户注册,让model的属性与模板默认prop对齐可减少传值工作量
  5. const model = {
  6. mobile: '',
  7. smsCode: '',
  8. newPassword: '',
  9. newPwdRepeat: '',
  10. nickName: '',
  11. sex: '',
  12. provinceName: '',
  13. examType: '',
  14. examMajor: ''
  15. }
  16. // 重写规则,如果model定义与模板prop吻合,一般不需要重写
  17. // allRules 在useRegisterInjection中
  18. const rules = {}
  19. // 因为要契合模板,所以model中定义的字段最好与模板中的prop相同,这样前端可以少做修改
  20. // 但有时API的接收定段并不与model相同,即在这里定义mapping
  21. // 待提交时使用`useModelMapping`进行转化即可
  22. const mapping = {
  23. mobile: 'username',
  24. smsCode: 'code',
  25. newPassword: 'password',
  26. newPwdRepeat: false, // delete when commit
  27. nickName: 'name'
  28. }
  29. return [model, rules, () => useModelMapping(model, mapping)]
  30. }
  31. export const createLoginModelRules = function () {
  32. const model = {
  33. username: '',
  34. password: ''
  35. }
  36. const rules = {}
  37. const mapping = {}
  38. return [model, rules, () => useModelMapping(model, mapping)]
  39. }
  40. export const createForgetPwdModelRules = function () {
  41. const model = {
  42. mobile: '',
  43. smsCode: '',
  44. newPassword: '',
  45. newPwdRepeat: ''
  46. }
  47. const rules = {}
  48. const mapping = {}
  49. return [model, rules, () => useModelMapping(model, mapping)]
  50. }
  51. export const createChangePhoneModelRules = function () {
  52. const model = {
  53. mobile: '',
  54. smsCode: ''
  55. }
  56. const rules = {}
  57. const mapping = {
  58. mobile: 'phonenumber',
  59. smsCode: 'code'
  60. }
  61. return [model, rules, () => useModelMapping(model, mapping)]
  62. }
  63. export const createBindPhoneModelRules = function () {
  64. const model = {
  65. mobile: '',
  66. smsCode: '',
  67. nickName: '',
  68. sex: '',
  69. provinceName: '',
  70. schoolId: '',
  71. customSchoolName: '',
  72. customClassName: '',
  73. examType: '',
  74. examMajor: ''
  75. }
  76. const rules = {}
  77. const mapping = {
  78. mobile: 'username',
  79. smsCode: 'code',
  80. nickName: 'name'
  81. }
  82. return [model, rules, () => useModelMapping(model, mapping)]
  83. }
  84. export const createActivateCardModelRules = function () {
  85. // bind-profile, bind-card 通用
  86. const model = {
  87. username: '',
  88. password: '',
  89. gaokaoYear: '',
  90. provinceName: '',
  91. schoolId: '',
  92. customSchoolName: '',
  93. customClassName: '',
  94. examType: '',
  95. examMajor: ''
  96. }
  97. const rules = {
  98. // 字段没有变,使用场景变了,描述名称需要重写
  99. username: [{required: true, message: '请输入会员卡卡号', trigger: 'error-change'}],
  100. password: [{required: true, message: '请输入会员卡密码', trigger: 'error-change'}]
  101. }
  102. const validateMapping = {
  103. username: 'username',
  104. password: 'password'
  105. }
  106. const bindMapping = {}
  107. return [
  108. model,
  109. rules,
  110. () => useModelMapping(model, validateMapping, true),
  111. () => useModelMapping(model, bindMapping)
  112. ]
  113. }
  114. export const createBasicInfoModelRules = function (modelRef) {
  115. // basicInfo中的model,是从currentUser拷贝的,不在这里定义, 这里只为保持一致的使用习惯
  116. const rules = {}
  117. const mapping = {
  118. nickName: 'name',
  119. provinceName: 'provinceName',
  120. sex: 'sex',
  121. customSchoolName: 'customSchoolName',
  122. customClassName: 'customClassName',
  123. examType: 'examType',
  124. examMajor: 'examMajor'
  125. }
  126. // strict: true, 因为baseInfo允许编辑的字段是有限的
  127. return [modelRef, rules, () => useModelMapping(toValue(modelRef), mapping, true)]
  128. }
  129. export const createChangePwdModelRules = function () {
  130. const model = {
  131. oldPassword: '',
  132. newPassword: '',
  133. newPwdRepeat: ''
  134. }
  135. const rules = {}
  136. const mapping = {newPwdRepeat: false}
  137. return [model, rules, () => useModelMapping(model, mapping)]
  138. }
  139. /*
  140. * @description 字段转义(字段提取与重命名)
  141. * @param {model} 来源
  142. * @param {mapping} [key:来源自段,value:目标字段]
  143. * @param {strict} 是否严格提取,false:未定义字段保留,true:未定义字段丢弃
  144. * @returns 目标对象
  145. * */
  146. export const useModelMapping = function (model, mapping, strict = false) {
  147. const result = {}
  148. _.forIn(model, (v, k) => {
  149. if (_.has(mapping, k)) {
  150. const mapK = mapping[k]
  151. if (mapK) result[mapK] = v
  152. // empty mapK will ignore
  153. } else if (!strict) {
  154. result[k] = v
  155. }
  156. })
  157. return result
  158. }